diff options
Diffstat (limited to 'applets')
-rw-r--r-- | applets/wncklet/showdesktop.c | 16 | ||||
-rw-r--r-- | applets/wncklet/window-list.c | 13 | ||||
-rw-r--r-- | applets/wncklet/window-menu.c | 9 | ||||
-rw-r--r-- | applets/wncklet/wncklet.c | 19 | ||||
-rw-r--r-- | applets/wncklet/wncklet.h | 7 | ||||
-rw-r--r-- | applets/wncklet/workspace-switcher.c | 13 |
6 files changed, 53 insertions, 24 deletions
diff --git a/applets/wncklet/showdesktop.c b/applets/wncklet/showdesktop.c index 190077f1..28a140b6 100644 --- a/applets/wncklet/showdesktop.c +++ b/applets/wncklet/showdesktop.c @@ -52,6 +52,9 @@ typedef struct { GtkOrientation orient; int size; +#ifdef HAVE_X11 + WnckHandle* wnck_handle; +#endif WnckScreen* wnck_screen; guint showing_desktop: 1; @@ -308,6 +311,10 @@ static void applet_destroyed(GtkWidget* applet, ShowDesktopData* sdd) sdd->icon_theme = NULL; } +#ifdef HAVE_X11 + g_clear_object(&sdd->wnck_handle); +#endif + g_free (sdd); } @@ -371,7 +378,7 @@ static void show_desktop_applet_realized(MatePanelApplet* applet, gpointer data) #ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { - sdd->wnck_screen = wnck_screen_get (gdk_x11_screen_get_screen_number (screen)); + sdd->wnck_screen = wncklet_get_screen (sdd->wnck_handle, sdd->applet); if (sdd->wnck_screen != NULL) wncklet_connect_while_alive (sdd->wnck_screen, "showing_desktop_changed", @@ -426,6 +433,13 @@ gboolean show_desktop_applet_fill(MatePanelApplet* applet) sdd->size = mate_panel_applet_get_size(MATE_PANEL_APPLET(sdd->applet)); +#ifdef HAVE_X11 + if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) + { + sdd->wnck_handle = wnck_handle_new(WNCK_CLIENT_TYPE_PAGER); + } +#endif + g_signal_connect (sdd->applet, "realize", G_CALLBACK (show_desktop_applet_realized), sdd); diff --git a/applets/wncklet/window-list.c b/applets/wncklet/window-list.c index 744d0ef7..fa1613b0 100644 --- a/applets/wncklet/window-list.c +++ b/applets/wncklet/window-list.c @@ -52,6 +52,10 @@ typedef struct { GtkWidget* tasklist; GtkWidget* preview; +#ifdef HAVE_X11 + WnckHandle* wnck_handle; +#endif + gboolean show_window_thumbnails; gint thumbnail_size; gboolean include_all_workspaces; @@ -464,7 +468,7 @@ static gboolean applet_enter_notify_event (WnckTasklist *tl, GList *wnck_windows /* Do not show preview if window is not visible nor in current workspace */ if (!wnck_window_is_visible_on_workspace (wnck_window, - wnck_screen_get_active_workspace (wnck_screen_get_default ()))) + wnck_screen_get_active_workspace (wncklet_get_screen (tasklist->wnck_handle, tasklist->applet)))) return FALSE; thumbnail = preview_window_thumbnail (wnck_window, tasklist, &thumbnail_width, &thumbnail_height, &thumbnail_scale); @@ -823,7 +827,8 @@ gboolean window_list_applet_fill(MatePanelApplet* applet) #ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { - tasklist->tasklist = wnck_tasklist_new(); + tasklist->wnck_handle = wnck_handle_new(WNCK_CLIENT_TYPE_PAGER); + tasklist->tasklist = wnck_tasklist_new_with_handle(tasklist->wnck_handle); g_signal_connect (tasklist->tasklist, "task-enter-notify", G_CALLBACK (applet_enter_notify_event), @@ -1192,5 +1197,9 @@ static void destroy_tasklist(GtkWidget* widget, TasklistData* tasklist) if (tasklist->preview) gtk_widget_destroy(tasklist->preview); +#ifdef HAVE_X11 + g_clear_object(&tasklist->wnck_handle); +#endif + g_free(tasklist); } diff --git a/applets/wncklet/window-menu.c b/applets/wncklet/window-menu.c index 4b4e48dc..e595dfdf 100644 --- a/applets/wncklet/window-menu.c +++ b/applets/wncklet/window-menu.c @@ -53,6 +53,9 @@ typedef struct { GtkWidget* applet; GtkWidget* selector; +#ifdef HAVE_X11 + WnckHandle* wnck_handle; +#endif int size; MatePanelAppletOrient orient; } WindowMenu; @@ -119,6 +122,9 @@ static const GtkActionEntry window_menu_actions[] = { static void window_menu_destroy(GtkWidget* widget, WindowMenu* window_menu) { +#ifdef HAVE_X11 + g_clear_object(&window_menu->wnck_handle); +#endif g_free(window_menu); } @@ -252,7 +258,8 @@ gboolean window_menu_applet_fill(MatePanelApplet* applet) #ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { - window_menu->selector = wnck_selector_new(); + window_menu->wnck_handle = wnck_handle_new(WNCK_CLIENT_TYPE_PAGER); + window_menu->selector = wnck_selector_new_with_handle(window_menu->wnck_handle); } else #endif /* HAVE_X11 */ diff --git a/applets/wncklet/wncklet.c b/applets/wncklet/wncklet.c index 3b185910..bede4705 100644 --- a/applets/wncklet/wncklet.c +++ b/applets/wncklet/wncklet.c @@ -96,18 +96,19 @@ void wncklet_display_help(GtkWidget* widget, const char* doc_id, const char* lin } #ifdef HAVE_X11 -WnckScreen* wncklet_get_screen(GtkWidget* applet) +WnckScreen* wncklet_get_screen(WnckHandle* handle, GtkWidget* applet) { + g_return_val_if_fail (WNCK_IS_HANDLE (handle), NULL); g_return_val_if_fail (GDK_IS_X11_DISPLAY (gdk_display_get_default ()), NULL); int screen_num; if (!gtk_widget_has_screen(applet)) - return wnck_screen_get_default(); + return wnck_handle_get_default_screen(handle); screen_num = gdk_x11_screen_get_screen_number(gtk_widget_get_screen(applet)); - return wnck_screen_get(screen_num); + return wnck_handle_get_screen(handle, screen_num); } #endif /* HAVE_X11 */ @@ -124,18 +125,6 @@ static gboolean wncklet_factory(MatePanelApplet* applet, const char* iid, gpoint { gboolean retval = FALSE; -#ifdef HAVE_X11 - if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) - { - static gboolean type_registered = FALSE; - if (!type_registered) - { - wnck_set_client_type(WNCK_CLIENT_TYPE_PAGER); - type_registered = TRUE; - } - } -#endif /* HAVE_X11 */ - if (!strcmp(iid, "WindowMenuApplet")) retval = window_menu_applet_fill(applet); else if (!strcmp(iid, "WorkspaceSwitcherApplet") || !strcmp(iid, "PagerApplet")) diff --git a/applets/wncklet/wncklet.h b/applets/wncklet/wncklet.h index 145cbce3..4b1dccea 100644 --- a/applets/wncklet/wncklet.h +++ b/applets/wncklet/wncklet.h @@ -28,17 +28,18 @@ #include <gtk/gtk.h> #include <mate-panel-applet.h> +#define WNCK_I_KNOW_THIS_IS_UNSTABLE +#include <libwnck/libwnck.h> + #define WNCKLET_RESOURCE_PATH "/org/mate/panel/applet/wncklet/" #ifdef __cplusplus extern "C" { #endif -typedef struct _WnckScreen WnckScreen; - void wncklet_display_help(GtkWidget* widget, const char* doc_id, const char* link_id, const char* icon_name); -WnckScreen* wncklet_get_screen(GtkWidget* applet); +WnckScreen* wncklet_get_screen(WnckHandle* handle, GtkWidget* applet); void wncklet_connect_while_alive(gpointer object, const char* signal, GCallback func, gpointer func_data, gpointer alive_object); diff --git a/applets/wncklet/workspace-switcher.c b/applets/wncklet/workspace-switcher.c index e3fda355..cba0ecbd 100644 --- a/applets/wncklet/workspace-switcher.c +++ b/applets/wncklet/workspace-switcher.c @@ -215,6 +215,9 @@ typedef struct { GtkWidget* pager_container; GtkWidget* pager; +#ifdef HAVE_X11 + WnckHandle* wnck_handle; +#endif WnckScreen* screen; PagerWM wm; @@ -399,7 +402,7 @@ static void applet_realized(MatePanelApplet* applet, PagerData* pager) #ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { - pager->screen = wncklet_get_screen(GTK_WIDGET(applet)); + pager->screen = wncklet_get_screen(pager->wnck_handle, GTK_WIDGET(applet)); wncklet_connect_while_alive(pager->screen, "window_manager_changed", G_CALLBACK(window_manager_changed), pager, pager->applet); } #endif /* HAVE_X11 */ @@ -772,7 +775,8 @@ gboolean workspace_switcher_applet_fill(MatePanelApplet* applet) #ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { - pager->pager = wnck_pager_new(); + pager->wnck_handle = wnck_handle_new(WNCK_CLIENT_TYPE_PAGER); + pager->pager = wnck_pager_new_with_handle(pager->wnck_handle); wnck_pager_set_shadow_type(WNCK_PAGER(pager->pager), GTK_SHADOW_IN); } else @@ -1288,5 +1292,10 @@ static void destroy_pager(GtkWidget* widget, PagerData* pager) if (pager->properties_dialog) gtk_widget_destroy(pager->properties_dialog); + +#ifdef HAVE_X11 + g_clear_object(&pager->wnck_handle); +#endif + g_free(pager); } |