Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Průhledné pozadí dokovací stardict ikonky v panelu - II. část  (Přečteno 1411 krát)

XomboX

  • Aktivní člen
  • *
  • Příspěvků: 454
Tímto vláknem bych chtěl navázat na staré vlákno, do kterého si již nedá přispívat.

Na internetu jsem našel skript (autor: Evgeniy Dushistov), který by měl řešit průhlednost stardict ikonky v GNOME panelu. Bohužel však nevím jak ho spustit/aplikovat. Mohli byste mi, prosím, poradit?

Děkuji za odpověď.


Kód: [Vybrat]
Index: src/eggtrayicon.c
===================================================================
--- src/eggtrayicon.c (revision 248)
+++ src/eggtrayicon.c (working copy)
@@ -66,6 +66,8 @@
 
 static void egg_tray_icon_realize   (GtkWidget *widget);
 static void egg_tray_icon_unrealize (GtkWidget *widget);
+static void egg_tray_icon_add (GtkContainer *container,
+                               GtkWidget *widget);
 
 #ifdef GDK_WINDOWING_X11
 static void egg_tray_icon_update_manager_window    (EggTrayIcon *icon,
@@ -113,6 +115,7 @@
 {
   GObjectClass *gobject_class = (GObjectClass *)klass;
   GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
+  GtkContainerClass *container_class = (GtkContainerClass *)klass;
 
   parent_class = g_type_class_peek_parent (klass);
 
@@ -121,6 +124,8 @@
   widget_class->realize   = egg_tray_icon_realize;
   widget_class->unrealize = egg_tray_icon_unrealize;
 
+  container_class->add = egg_tray_icon_add;
+
   g_object_class_install_property (gobject_class,
     PROP_ORIENTATION,
     g_param_spec_enum ("orientation",
@@ -159,8 +164,37 @@
 }
 
 #ifdef GDK_WINDOWING_X11
+static gboolean
+transparent_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
+{
+ gdk_window_clear_area (widget->window, event->area.x, event->area.y,
+                       event->area.width, event->area.height);
+ return FALSE;
+}
 
 static void
+make_transparent_again (GtkWidget *widget, GtkStyle *previous_style,
+                       gpointer user_data)
+{
+ gdk_window_set_back_pixmap(widget->window, NULL, TRUE);
+}
+
+static void
+make_transparent (GtkWidget *widget, gpointer user_data)
+{
+ if (GTK_WIDGET_NO_WINDOW (widget) || GTK_WIDGET_APP_PAINTABLE (widget))
+ return;
+
+ gtk_widget_set_app_paintable (widget, TRUE);
+ gtk_widget_set_double_buffered (widget, FALSE);
+ gdk_window_set_back_pixmap (widget->window, NULL, TRUE);
+ g_signal_connect (widget, "expose_event",
+                  G_CALLBACK (transparent_expose_event), NULL);
+ g_signal_connect_after (widget, "style_set",
+                        G_CALLBACK (make_transparent_again), NULL);
+}
+
+static void
 egg_tray_icon_get_orientation_property (EggTrayIcon *icon)
 {
   Display *xdisplay;
@@ -238,10 +272,22 @@
     }
   return GDK_FILTER_CONTINUE;
 }
-
+#else
+static void
+make_transparent (GtkWidget *widget, gpointer user_data)
+{
+}
 #endif 
 
 static void
+egg_tray_icon_add (GtkContainer *container, GtkWidget *widget)
+{
+ g_signal_connect (widget, "realize",
+                  G_CALLBACK (make_transparent), NULL);
+ GTK_CONTAINER_CLASS (parent_class)->add (container, widget);
+}
+
+static void
 egg_tray_icon_unrealize (GtkWidget *widget)
 {
 #ifdef GDK_WINDOWING_X11
@@ -381,6 +427,8 @@
   if (GTK_WIDGET_CLASS (parent_class)->realize)
     GTK_WIDGET_CLASS (parent_class)->realize (widget);
 
+  make_transparent (widget, NULL);
+
   screen = gtk_widget_get_screen (widget);
   display = gdk_screen_get_display (screen);
   xdisplay = gdk_x11_display_get_xdisplay (display);

Poznámka:
Ikonka stardictu jako taková průhledná je, ale v panelu se průhledné pozadí vykresluje bíle.
Asus A6JC-Q003, Ubuntu
Jabber: xombox@jabbim.cz
Ubuntu User number is #12210  Monday, applications choke Tuesday, Wednesday, RAID set's broke Thursday, let out the magic smoke but on Friday, I patch bugs Monday, my xorg conf is toast Tuesday, Wednesday, CPU roasts Thursday, it won't even POST but on Friday, I patch bugs

XomboX

  • Aktivní člen
  • *
  • Příspěvků: 454
Re: Průhledné pozadí dokovací stardict ikonky v panelu - II. část
« Odpověď #1 kdy: 06 Dubna 2008, 17:52:29 »
Tak jsem se dozvedel, ze to je pry patch, ktery se aplikuje na zdrojove kody pred vlastnim prekladem. Nevite nekdo nahodou jak na to?
Asus A6JC-Q003, Ubuntu
Jabber: xombox@jabbim.cz
Ubuntu User number is #12210  Monday, applications choke Tuesday, Wednesday, RAID set's broke Thursday, let out the magic smoke but on Friday, I patch bugs Monday, my xorg conf is toast Tuesday, Wednesday, CPU roasts Thursday, it won't even POST but on Friday, I patch bugs

 

Provoz zaštiťuje spolek OpenAlt.