summaryrefslogtreecommitdiff
path: root/applets
diff options
context:
space:
mode:
Diffstat (limited to 'applets')
-rw-r--r--applets/wncklet/showdesktop.c16
-rw-r--r--applets/wncklet/window-list.c13
-rw-r--r--applets/wncklet/window-menu.c9
-rw-r--r--applets/wncklet/wncklet.c19
-rw-r--r--applets/wncklet/wncklet.h7
-rw-r--r--applets/wncklet/workspace-switcher.c13
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);
}