summaryrefslogtreecommitdiff
path: root/applets/wncklet/window-list.c
diff options
context:
space:
mode:
Diffstat (limited to 'applets/wncklet/window-list.c')
-rw-r--r--applets/wncklet/window-list.c61
1 files changed, 20 insertions, 41 deletions
diff --git a/applets/wncklet/window-list.c b/applets/wncklet/window-list.c
index 93785cc1..17821cdd 100644
--- a/applets/wncklet/window-list.c
+++ b/applets/wncklet/window-list.c
@@ -25,6 +25,11 @@
#include <libwnck/libwnck.h>
#endif /* HAVE_X11 */
+#ifndef HAVE_X11
+#include <gdk/gdkwayland.h>
+#define GDK_IS_X11_DISPLAY(object) !(G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_WAYLAND_DISPLAY))
+#endif
+
#ifdef HAVE_WAYLAND
#include <gdk/gdkwayland.h>
#include "wayland-backend.h"
@@ -39,9 +44,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 +55,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;
@@ -76,12 +81,10 @@ typedef struct {
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;
@@ -94,9 +97,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);
@@ -242,7 +243,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,
@@ -367,14 +367,14 @@ preview_window_reposition (WnckTasklist *tl,
x_pos = monitor_geom.width + monitor_geom.x - width - tasklist->size - PREVIEW_PADDING;
break;
case MATE_PANEL_APPLET_ORIENT_RIGHT:
- x_pos = tasklist->size + PREVIEW_PADDING;
+ x_pos = monitor_geom.x + tasklist->size + PREVIEW_PADDING;
break;
case MATE_PANEL_APPLET_ORIENT_UP:
y_pos = monitor_geom.height + monitor_geom.y - height - tasklist->size - PREVIEW_PADDING;
break;
case MATE_PANEL_APPLET_ORIENT_DOWN:
default:
- y_pos = tasklist->size + PREVIEW_PADDING;
+ y_pos = monitor_geom.y + tasklist->size + PREVIEW_PADDING;
break;
}
@@ -473,7 +473,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);
@@ -509,7 +509,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)
@@ -598,7 +597,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;
@@ -621,7 +619,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)
{
@@ -711,7 +708,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,
@@ -723,7 +719,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),
@@ -779,23 +774,21 @@ 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);
@@ -804,11 +797,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");
@@ -840,16 +831,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();
+ 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 */
@@ -1004,12 +994,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)
{
@@ -1060,9 +1048,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 */
@@ -1082,7 +1068,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");
@@ -1099,10 +1084,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");
@@ -1144,13 +1125,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);
@@ -1208,11 +1187,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);
@@ -1221,9 +1198,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);