gtk-traymanager 0.1.6 → 1.0.0
raw patch · 3 files changed
+47/−49 lines, 3 filesdep +gtk3dep −gtknew-uploader
Dependencies added: gtk3
Dependencies removed: gtk
Files
- gtk-traymanager.cabal +5/−5
- src/Graphics/UI/Gtk/Misc/TrayManager.hs +0/−1
- src/c/eggtraymanager.c +42/−43
gtk-traymanager.cabal view
@@ -1,5 +1,5 @@ name: gtk-traymanager-version: 0.1.6+version: 1.0.0 synopsis: A wrapper around the eggtraymanager library for Linux system trays license: LGPL-2.1 license-file: LICENSE@@ -22,10 +22,10 @@ library default-language: Haskell2010 exposed-modules: Graphics.UI.Gtk.Misc.TrayManager- build-depends: gtk >= 0.12.1 && < 0.15,- glib >= 0.12.1 && < 0.15,- base > 3 && < 5- pkgconfig-depends: gtk+-2.0, x11+ build-depends: base > 3 && < 5+ , glib >= 0.12.1 && < 0.15+ , gtk3+ pkgconfig-depends: gtk+-3.0, x11 hs-source-dirs: src c-sources: src/c/eggtraymanager.c, src/c/eggmarshalers.c, src/c/gdk-helper.c ghc-options: -Wall
src/Graphics/UI/Gtk/Misc/TrayManager.hs view
@@ -97,7 +97,6 @@ toTrayManager = unsafeCastGObject . toGObject instance TrayManagerClass TrayManager-instance ObjectClass TrayManager instance GObjectClass TrayManager where toGObject = GObject . castForeignPtr . unTrayManager unsafeCastGObject = TrayManager . castForeignPtr . unGObject
src/c/eggtraymanager.c view
@@ -19,9 +19,7 @@ #include <string.h> #include <gdk/gdkx.h>-#include <gtk/gtkinvisible.h>-#include <gtk/gtksocket.h>-#include <gtk/gtkwindow.h>+#include <gtk/gtk.h> #include "eggtraymanager.h" #include "eggmarshalers.h" #include "gdk-helper.h"@@ -41,7 +39,7 @@ { long id, len; long remaining_len;- + long timeout; Window window; char *str;@@ -100,12 +98,12 @@ egg_tray_manager_class_init (EggTrayManagerClass *klass) { GObjectClass *gobject_class;- + parent_class = g_type_class_peek_parent (klass); gobject_class = (GObjectClass *)klass; gobject_class->finalize = egg_tray_manager_finalize;- + manager_signals[TRAY_ICON_ADDED] = g_signal_new ("tray_icon_added", G_OBJECT_CLASS_TYPE (klass),@@ -162,11 +160,11 @@ egg_tray_manager_finalize (GObject *object) { EggTrayManager *manager;- + manager = EGG_TRAY_MANAGER (object); egg_tray_manager_unmanage (manager);- + G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -182,7 +180,7 @@ static gboolean egg_tray_manager_plug_removed (GtkSocket *socket,- EggTrayManager *manager)+ EggTrayManager *manager) { Window *window; @@ -191,7 +189,7 @@ g_hash_table_remove (manager->socket_table, GINT_TO_POINTER (*window)); g_object_set_data (G_OBJECT (socket), "egg-tray-child-window", NULL);- + g_signal_emit (manager, manager_signals[TRAY_ICON_REMOVED], 0, socket); /* This destroys the socket. */@@ -200,20 +198,20 @@ static void egg_tray_manager_handle_dock_request (EggTrayManager *manager,- XClientMessageEvent *xevent)+ XClientMessageEvent *xevent) { GtkWidget *socket; Window *window;- + socket = gtk_socket_new ();- + /* We need to set the child window here * so that the client can call _get functions * in the signal handler */ window = g_new (Window, 1); *window = xevent->data.l[2];- + g_object_set_data_full (G_OBJECT (socket), "egg-tray-child-window", window, g_free);@@ -225,7 +223,7 @@ { g_signal_connect (socket, "plug_removed", G_CALLBACK (egg_tray_manager_plug_removed), manager);- + gtk_socket_add_id (GTK_SOCKET (socket), xevent->data.l[2]); g_hash_table_insert (manager->socket_table, GINT_TO_POINTER (xevent->data.l[2]), socket);@@ -247,7 +245,7 @@ { GList *p; int len;- + /* Try to see if we can find the * pending message in the list */@@ -277,7 +275,7 @@ } manager->messages = g_list_remove_link (manager->messages, p);- + pending_message_free (msg); } @@ -327,9 +325,9 @@ XClientMessageEvent *xevent) { GtkSocket *socket;- + socket = g_hash_table_lookup (manager->socket_table, GINT_TO_POINTER (xevent->window));- + if (socket) { g_signal_emit (manager, manager_signals[MESSAGE_CANCELLED], 0,@@ -339,7 +337,7 @@ static GdkFilterReturn egg_tray_manager_handle_event (EggTrayManager *manager,- XClientMessageEvent *xevent)+ XClientMessageEvent *xevent) { switch (xevent->data.l[1]) {@@ -384,7 +382,7 @@ g_signal_emit (manager, manager_signals[LOST_SELECTION], 0); egg_tray_manager_unmanage (manager); }- + return GDK_FILTER_CONTINUE; } @@ -400,19 +398,20 @@ invisible = manager->invisible; g_assert (GTK_IS_INVISIBLE (invisible));- g_assert (GTK_WIDGET_REALIZED (invisible));- g_assert (GDK_IS_WINDOW (invisible->window));- - display = GDK_WINDOW_XDISPLAY (invisible->window);- + g_assert (gtk_widget_get_realized(invisible));+ g_assert (GDK_IS_WINDOW (gtk_widget_get_window(invisible)));++ display = GDK_WINDOW_XDISPLAY (gtk_widget_get_window(invisible));+ if (XGetSelectionOwner (display, manager->selection_atom) ==- GDK_WINDOW_XWINDOW (invisible->window))+ GDK_WINDOW_XID (gtk_widget_get_window(invisible))) {- timestamp = gdk_x11_get_server_time (invisible->window); + timestamp = gdk_x11_get_server_time (gtk_widget_get_window(invisible)); XSetSelectionOwner (display, manager->selection_atom, None, timestamp); } - gdk_window_remove_filter (invisible->window, egg_tray_manager_window_filter, manager); + gdk_window_remove_filter (gtk_widget_get_window(invisible),+ egg_tray_manager_window_filter, manager); manager->invisible = NULL; /* prior to destroy for reentrancy paranoia */ gtk_widget_destroy (invisible);@@ -426,7 +425,7 @@ char *selection_atom_name; guint32 timestamp; GdkScreen *screen;- + g_return_val_if_fail (EGG_IS_TRAY_MANAGER (manager), FALSE); g_return_val_if_fail (manager->screen == NULL, FALSE); @@ -439,10 +438,10 @@ #endif screen = gdk_display_get_screen (gdk_x11_lookup_xdisplay (DisplayOfScreen (xscreen)), XScreenNumberOfScreen (xscreen));- + invisible = gtk_invisible_new_for_screen (screen); gtk_widget_realize (invisible);- + gtk_widget_add_events (invisible, GDK_PROPERTY_CHANGE_MASK | GDK_STRUCTURE_MASK); selection_atom_name = g_strdup_printf ("_NET_SYSTEM_TRAY_S%d",@@ -450,14 +449,14 @@ manager->selection_atom = XInternAtom (DisplayOfScreen (xscreen), selection_atom_name, False); g_free (selection_atom_name);- - timestamp = gdk_x11_get_server_time (invisible->window);++ timestamp = gdk_x11_get_server_time (gtk_widget_get_window(invisible)); XSetSelectionOwner (DisplayOfScreen (xscreen), manager->selection_atom,- GDK_WINDOW_XWINDOW (invisible->window), timestamp);+ GDK_WINDOW_XID (gtk_widget_get_window(invisible)), timestamp); /* Check if we were could set the selection owner successfully */ if (XGetSelectionOwner (DisplayOfScreen (xscreen), manager->selection_atom) ==- GDK_WINDOW_XWINDOW (invisible->window))+ GDK_WINDOW_XID (gtk_widget_get_window(invisible))) { XClientMessageEvent xev; @@ -468,7 +467,7 @@ xev.format = 32; xev.data.l[0] = timestamp; xev.data.l[1] = manager->selection_atom;- xev.data.l[2] = GDK_WINDOW_XWINDOW (invisible->window);+ xev.data.l[2] = GDK_WINDOW_XID (gtk_widget_get_window(invisible)); xev.data.l[3] = 0; /* manager specific data */ xev.data.l[4] = 0; /* manager specific data */ @@ -478,7 +477,7 @@ manager->invisible = invisible; g_object_ref (G_OBJECT (manager->invisible));- + manager->opcode_atom = XInternAtom (DisplayOfScreen (xscreen), "_NET_SYSTEM_TRAY_OPCODE", False);@@ -488,13 +487,13 @@ False); /* Add a window filter */- gdk_window_add_filter (invisible->window, egg_tray_manager_window_filter, manager);+ gdk_window_add_filter (gtk_widget_get_window(invisible), egg_tray_manager_window_filter, manager); return TRUE; } else { gtk_widget_destroy (invisible);- + return FALSE; } }@@ -506,7 +505,7 @@ g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE); g_return_val_if_fail (manager->screen == NULL, FALSE); - return egg_tray_manager_manage_xscreen (manager, + return egg_tray_manager_manage_xscreen (manager, GDK_SCREEN_XSCREEN (screen)); } @@ -550,7 +549,7 @@ g_return_val_if_fail (EGG_IS_TRAY_MANAGER (manager), NULL); g_return_val_if_fail (GTK_IS_SOCKET (child), NULL);- + child_window = g_object_get_data (G_OBJECT (child), "egg-tray-child-window"); @@ -566,7 +565,7 @@ False, utf8_string, &type, &format, &nitems, &bytes_after, (guchar **)&val);- + if (gdk_error_trap_pop () || result != Success) return NULL;