diff options
Diffstat (limited to 'applets/wncklet')
| -rw-r--r-- | applets/wncklet/Makefile.am | 6 | ||||
| -rw-r--r-- | applets/wncklet/showdesktop.c | 16 | ||||
| -rw-r--r-- | applets/wncklet/window-list.c | 113 | ||||
| -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 |
7 files changed, 55 insertions, 128 deletions
diff --git a/applets/wncklet/Makefile.am b/applets/wncklet/Makefile.am index 14f8a5c7..137e471b 100644 --- a/applets/wncklet/Makefile.am +++ b/applets/wncklet/Makefile.am @@ -107,16 +107,10 @@ BUILT_SOURCES = \ wncklet-resources.c \ wncklet-resources.h -if HAVE_WINDOW_PREVIEWS wncklet_gschemas_in = \ org.mate.panel.applet.window-list.gschema.xml.in \ org.mate.panel.applet.window-list-previews.gschema.xml.in \ org.mate.panel.applet.workspace-switcher.gschema.xml.in -else -wncklet_gschemas_in = \ - org.mate.panel.applet.window-list.gschema.xml.in \ - org.mate.panel.applet.workspace-switcher.gschema.xml.in -endif gsettings_SCHEMAS = $(wncklet_gschemas_in:.xml.in=.xml) @GSETTINGS_RULES@ 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 a87649b1..3af47e64 100644 --- a/applets/wncklet/window-list.c +++ b/applets/wncklet/window-list.c @@ -39,9 +39,7 @@ #define WINDOW_LIST_ICON "mate-panel-window-list" #define WINDOW_LIST_SCHEMA "org.mate.panel.applet.window-list" -#ifdef HAVE_WINDOW_PREVIEWS #define WINDOW_LIST_PREVIEW_SCHEMA "org.mate.panel.applet.window-list-previews" -#endif /* HAVE_WINDOW_PREVIEWS */ typedef enum { TASKLIST_NEVER_GROUP, @@ -52,12 +50,14 @@ typedef enum { typedef struct { GtkWidget* applet; GtkWidget* tasklist; -#ifdef HAVE_WINDOW_PREVIEWS GtkWidget* preview; +#ifdef HAVE_X11 + WnckHandle* wnck_handle; +#endif + gboolean show_window_thumbnails; gint thumbnail_size; -#endif gboolean include_all_workspaces; TasklistGroupingType grouping; @@ -71,19 +71,15 @@ typedef struct { gboolean needs_hints; #endif - GtkIconTheme* icon_theme; - /* Properties: */ GtkWidget* properties_dialog; GtkWidget* wayland_info_label; GtkWidget* show_current_radio; GtkWidget* show_all_radio; -#ifdef HAVE_WINDOW_PREVIEWS GtkWidget* window_thumbnail_box; GtkWidget* show_thumbnails_check; GtkWidget* thumbnail_size_label; GtkWidget* thumbnail_size_spin; -#endif GtkWidget* never_group_radio; GtkWidget* auto_group_radio; GtkWidget* always_group_radio; @@ -96,9 +92,7 @@ typedef struct { GtkWidget* window_list_content_box; GSettings* settings; -#ifdef HAVE_WINDOW_PREVIEWS GSettings* preview_settings; -#endif } TasklistData; static void call_system_monitor(GtkAction* action, TasklistData* tasklist); @@ -205,11 +199,6 @@ static void response_cb(GtkWidget* widget, int id, TasklistData* tasklist) } } -static void applet_realized(MatePanelApplet* applet, TasklistData* tasklist) -{ - tasklist->icon_theme = gtk_icon_theme_get_for_screen(gtk_widget_get_screen(tasklist->applet)); -} - static void applet_change_orient(MatePanelApplet* applet, MatePanelAppletOrient orient, TasklistData* tasklist) { GtkOrientation new_orient; @@ -249,7 +238,6 @@ static void applet_change_background(MatePanelApplet* applet, MatePanelAppletBac } #ifdef HAVE_X11 -#ifdef HAVE_WINDOW_PREVIEWS static cairo_surface_t* preview_window_thumbnail (WnckWindow *wnck_window, TasklistData *tasklist, @@ -480,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); @@ -516,7 +504,6 @@ static gboolean applet_leave_notify_event (WnckTasklist *tl, GList *wnck_windows return FALSE; } -#endif /* HAVE_WINDOW_PREVIEWS */ #endif /* HAVE_X11 */ static void applet_change_pixel_size(MatePanelApplet* applet, gint size, TasklistData* tasklist) @@ -605,7 +592,6 @@ static void display_all_workspaces_changed(GSettings* settings, gchar* key, Task tasklist_properties_update_content_radio(tasklist); } -#ifdef HAVE_WINDOW_PREVIEWS static void tasklist_update_thumbnail_size_spin(TasklistData* tasklist) { GtkWidget* button; @@ -628,7 +614,6 @@ static void thumbnail_size_changed(GSettings *settings, gchar* key, TasklistData tasklist->thumbnail_size = g_settings_get_int(settings, key); tasklist_update_thumbnail_size_spin(tasklist); } -#endif static GtkWidget* get_grouping_button(TasklistData* tasklist, TasklistGroupingType type) { @@ -718,7 +703,6 @@ static void setup_gsettings(TasklistData* tasklist) G_CALLBACK (display_all_workspaces_changed), tasklist); -#ifdef HAVE_WINDOW_PREVIEWS tasklist->preview_settings = mate_panel_applet_settings_new (MATE_PANEL_APPLET (tasklist->applet), WINDOW_LIST_PREVIEW_SCHEMA); g_signal_connect (tasklist->preview_settings, @@ -730,7 +714,6 @@ static void setup_gsettings(TasklistData* tasklist) "changed::thumbnail-window-size", G_CALLBACK (thumbnail_size_changed), tasklist); -#endif g_signal_connect (tasklist->settings, "changed::group-windows", G_CALLBACK (group_windows_changed), @@ -781,77 +764,26 @@ static void applet_size_allocate(GtkWidget *widget, GtkAllocation *allocation, T mate_panel_applet_set_size_hints(MATE_PANEL_APPLET(tasklist->applet), size_hints, len, 0); } -#ifdef HAVE_X11 -/* Currently only used on X11, but should work on Wayland as well when needed */ -static GdkPixbuf* icon_loader_func(const char* icon, int size, unsigned int flags, void* data) -{ - TasklistData* tasklist; - GdkPixbuf* retval; - char* icon_no_extension; - char* p; - - tasklist = data; - - if (icon == NULL || strcmp(icon, "") == 0) - return NULL; - - if (g_path_is_absolute(icon)) - { - if (g_file_test(icon, G_FILE_TEST_EXISTS)) - { - return gdk_pixbuf_new_from_file_at_size(icon, size, size, NULL); - } - else - { - char* basename; - - basename = g_path_get_basename(icon); - retval = icon_loader_func(basename, size, flags, data); - g_free(basename); - - return retval; - } - } - - /* This is needed because some .desktop files have an icon name *and* - * an extension as icon */ - icon_no_extension = g_strdup(icon); - p = strrchr(icon_no_extension, '.'); - - if (p && (strcmp(p, ".png") == 0 || strcmp(p, ".xpm") == 0 || strcmp(p, ".svg") == 0)) - { - *p = 0; - } - - retval = gtk_icon_theme_load_icon(tasklist->icon_theme, icon_no_extension, size, 0, NULL); - g_free(icon_no_extension); - - return retval; -} -#endif /* HAVE_X11 */ - gboolean window_list_applet_fill(MatePanelApplet* applet) { TasklistData* tasklist; GtkActionGroup* action_group; GtkCssProvider *provider; - GdkScreen *screen; tasklist = g_new0(TasklistData, 1); tasklist->applet = GTK_WIDGET(applet); provider = gtk_css_provider_new (); - screen = gdk_screen_get_default (); gtk_css_provider_load_from_data (provider, ".mate-panel-menu-bar button,\n" " #tasklist-button {\n" " padding: 0px;\n" " margin: 0px;\n }", -1, NULL); - gtk_style_context_add_provider_for_screen (screen, - GTK_STYLE_PROVIDER (provider), - GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (tasklist->applet), + GTK_STYLE_PROVIDER (provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); g_object_unref (provider); mate_panel_applet_set_flags(MATE_PANEL_APPLET(tasklist->applet), MATE_PANEL_APPLET_EXPAND_MAJOR | MATE_PANEL_APPLET_EXPAND_MINOR | MATE_PANEL_APPLET_HAS_HANDLE); @@ -860,11 +792,9 @@ gboolean window_list_applet_fill(MatePanelApplet* applet) tasklist->include_all_workspaces = g_settings_get_boolean (tasklist->settings, "display-all-workspaces"); -#ifdef HAVE_WINDOW_PREVIEWS tasklist->show_window_thumbnails = g_settings_get_boolean (tasklist->preview_settings, "show-window-thumbnails"); tasklist->thumbnail_size = g_settings_get_int (tasklist->preview_settings, "thumbnail-window-size"); -#endif tasklist->grouping = g_settings_get_enum (tasklist->settings, "group-windows"); @@ -896,18 +826,15 @@ gboolean window_list_applet_fill(MatePanelApplet* applet) #ifdef HAVE_X11 if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { - tasklist->tasklist = wnck_tasklist_new(); - - wnck_tasklist_set_icon_loader(WNCK_TASKLIST(tasklist->tasklist), icon_loader_func, tasklist, NULL); + tasklist->wnck_handle = wnck_handle_new(WNCK_CLIENT_TYPE_PAGER); + tasklist->tasklist = wnck_tasklist_new_with_handle(tasklist->wnck_handle); -#ifdef HAVE_WINDOW_PREVIEWS g_signal_connect (tasklist->tasklist, "task-enter-notify", G_CALLBACK (applet_enter_notify_event), tasklist); g_signal_connect (tasklist->tasklist, "task-leave-notify", G_CALLBACK (applet_leave_notify_event), tasklist); -#endif /* HAVE_WINDOW_PREVIEWS */ } else #endif /* HAVE_X11 */ @@ -935,9 +862,6 @@ gboolean window_list_applet_fill(MatePanelApplet* applet) gtk_container_add(GTK_CONTAINER(tasklist->applet), tasklist->tasklist); - g_signal_connect (tasklist->applet, "realize", - G_CALLBACK (applet_realized), - tasklist); g_signal_connect (tasklist->applet, "change-orient", G_CALLBACK (applet_change_orient), tasklist); @@ -1065,12 +989,10 @@ static void group_windows_toggled(GtkToggleButton* button, TasklistData* tasklis } } -#ifdef HAVE_WINDOW_PREVIEWS static void thumbnail_size_spin_changed(GtkSpinButton* button, TasklistData* tasklist) { g_settings_set_int(tasklist->preview_settings, "thumbnail-window-size", gtk_spin_button_get_value_as_int(button)); } -#endif static void move_minimized_toggled(GtkToggleButton* button, TasklistData* tasklist) { @@ -1121,9 +1043,7 @@ static void setup_dialog_wayland(TasklistData* tasklist) gtk_widget_set_sensitive(tasklist->window_grouping_box, FALSE); gtk_widget_set_sensitive(tasklist->minimized_windows_box, FALSE); -#ifdef HAVE_WINDOW_PREVIEWS gtk_widget_set_sensitive(tasklist->window_thumbnail_box, FALSE); -#endif /* HAVE_WINDOW_PREVIEWS */ } #endif /* HAVE_WAYLAND */ @@ -1143,7 +1063,6 @@ static void setup_dialog(GtkBuilder* builder, TasklistData* tasklist) setup_sensitivity(tasklist, builder, "never_group_radio", "auto_group_radio", "always_group_radio", "group-windows" /* key */); -#ifdef HAVE_WINDOW_PREVIEWS tasklist->window_thumbnail_box = WID("window_thumbnail_box"); tasklist->show_thumbnails_check = WID("show_thumbnails_check"); tasklist->thumbnail_size_label = WID("thumbnail_size_label"); @@ -1160,10 +1079,6 @@ static void setup_dialog(GtkBuilder* builder, TasklistData* tasklist) g_object_bind_property(tasklist->show_thumbnails_check, "active", tasklist->thumbnail_size_label, "sensitive", G_BINDING_DEFAULT); g_object_bind_property(tasklist->show_thumbnails_check, "active", tasklist->thumbnail_size_spin, "sensitive", G_BINDING_DEFAULT); -#else - gtk_widget_hide(WID("window_thumbnail_box")); -#endif - tasklist->move_minimized_radio = WID("move_minimized_radio"); tasklist->change_workspace_radio = WID("change_workspace_radio"); tasklist->mouse_scroll_check = WID("mouse_scroll_check"); @@ -1205,13 +1120,11 @@ static void setup_dialog(GtkBuilder* builder, TasklistData* tasklist) "active", G_SETTINGS_BIND_DEFAULT); -#ifdef HAVE_WINDOW_PREVIEWS /* change thumbnail size: */ tasklist_update_thumbnail_size_spin(tasklist); g_signal_connect (tasklist->thumbnail_size_spin, "value-changed", (GCallback) thumbnail_size_spin_changed, tasklist); -#endif /* move window when unminimizing: */ tasklist_update_unminimization_radio(tasklist); @@ -1269,11 +1182,9 @@ static void destroy_tasklist(GtkWidget* widget, TasklistData* tasklist) { g_signal_handlers_disconnect_by_data (G_OBJECT (tasklist->applet), tasklist); -#ifdef HAVE_WINDOW_PREVIEWS g_signal_handlers_disconnect_by_data (G_OBJECT (tasklist->tasklist), tasklist); g_signal_handlers_disconnect_by_data (tasklist->preview_settings, tasklist); g_object_unref(tasklist->preview_settings); -#endif g_signal_handlers_disconnect_by_data (tasklist->settings, tasklist); @@ -1282,9 +1193,11 @@ static void destroy_tasklist(GtkWidget* widget, TasklistData* tasklist) if (tasklist->properties_dialog) gtk_widget_destroy(tasklist->properties_dialog); -#ifdef HAVE_WINDOW_PREVIEWS 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); } |
