[gnome-applets/wip/segeiger/type-changed: 2/4] windowpicker: listen to type-changed signal of WnckWindow
- From: Sebastian Geiger <segeiger src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-applets/wip/segeiger/type-changed: 2/4] windowpicker: listen to type-changed signal of WnckWindow
- Date: Sun, 14 Feb 2016 00:21:54 +0000 (UTC)
commit 62f2492dd83b49ab8775e94b337024d10058f163
Author: Sebastian Geiger <sbastig gmx net>
Date: Wed Dec 2 11:23:23 2015 +0100
windowpicker: listen to type-changed signal of WnckWindow
configure.ac | 2 +-
windowpicker/src/task-item.c | 23 +++++++++++++++++++++
windowpicker/src/task-list.c | 44 ++++++++++++++++++++++++++++++++++-------
3 files changed, 60 insertions(+), 9 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 123c685..e23d8a7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -64,7 +64,7 @@ GLIB_REQUIRED=2.44.0
GIO_REQUIRED=2.26.0
LIBPANEL_REQUIRED=3.18.0
LIBGTOP_REQUIRED=2.11.92
-LIBWNCK_REQUIRED=2.91.0
+LIBWNCK_REQUIRED=3.14.1
LIBNOTIFY_REQUIRED=0.7
UPOWER_REQUIRED=0.9.4
DBUS_REQUIRED=1.1.2
diff --git a/windowpicker/src/task-item.c b/windowpicker/src/task-item.c
index b5e6e32..d781486 100644
--- a/windowpicker/src/task-item.c
+++ b/windowpicker/src/task-item.c
@@ -466,6 +466,26 @@ static void on_window_icon_changed (WnckWindow *window, TaskItem *item) {
gtk_widget_queue_draw (GTK_WIDGET (item));
}
+static void
+on_window_type_changed (WnckWindow *window,
+ TaskItem *item)
+{
+ WnckWindowType type;
+
+ if (item->priv->window != window)
+ return;
+
+ type = wnck_window_get_window_type (window);
+
+ if (type == WNCK_WINDOW_DESKTOP ||
+ type == WNCK_WINDOW_DOCK ||
+ type == WNCK_WINDOW_SPLASHSCREEN ||
+ type == WNCK_WINDOW_MENU)
+ {
+ task_item_close (item, window);
+ }
+}
+
static void on_screen_active_window_changed (
WnckScreen *screen,
WnckWindow *old_window,
@@ -547,6 +567,7 @@ disconnect_window (TaskItem *item)
g_signal_handlers_disconnect_by_func (window, on_window_state_changed,
item);
g_signal_handlers_disconnect_by_func (window, on_window_icon_changed, item);
+ g_signal_handlers_disconnect_by_func (window, on_window_type_changed, item);
}
static void
@@ -876,6 +897,8 @@ GtkWidget *task_item_new (WpApplet* windowPickerApplet, WnckWindow *window) {
G_CALLBACK (on_window_state_changed), item);
g_signal_connect (window, "icon-changed",
G_CALLBACK (on_window_icon_changed), item);
+ g_signal_connect (window, "type-changed",
+ G_CALLBACK (on_window_type_changed), item);
g_signal_connect(item, "draw",
G_CALLBACK(task_item_draw), windowPickerApplet);
g_signal_connect (item, "button-release-event",
diff --git a/windowpicker/src/task-list.c b/windowpicker/src/task-list.c
index 00bec88..46680ef 100644
--- a/windowpicker/src/task-list.c
+++ b/windowpicker/src/task-list.c
@@ -42,12 +42,47 @@ static void on_task_item_closed (
gtk_widget_destroy (GTK_WIDGET (item));
}
+static void create_task_item (TaskList *taskList,
+ WnckWindow *window)
+{
+ GtkWidget *item;
+
+ item = task_item_new (taskList->priv->windowPickerApplet,
+ window);
+
+ if (item)
+ {
+ gtk_container_add (GTK_CONTAINER (taskList), item);
+ g_signal_connect (TASK_ITEM (item), "task-item-closed",
+ G_CALLBACK (on_task_item_closed), taskList);
+ }
+}
+
+static void type_changed (WnckWindow *window,
+ gpointer user_data)
+{
+ TaskList *taskList = TASK_LIST (user_data);
+ WnckWindowType type = wnck_window_get_window_type (window);
+
+ if (!(type == WNCK_WINDOW_DESKTOP
+ || type == WNCK_WINDOW_DOCK
+ || type == WNCK_WINDOW_SPLASHSCREEN
+ || type == WNCK_WINDOW_MENU))
+ {
+ create_task_item (taskList, window);
+ }
+}
+
static void on_window_opened (WnckScreen *screen,
WnckWindow *window,
TaskList *taskList)
{
g_return_if_fail (taskList != NULL);
WnckWindowType type = wnck_window_get_window_type (window);
+
+ g_signal_connect (window, "type-changed", G_CALLBACK (type_changed),
+ taskList);
+
if (type == WNCK_WINDOW_DESKTOP
|| type == WNCK_WINDOW_DOCK
|| type == WNCK_WINDOW_SPLASHSCREEN
@@ -56,14 +91,7 @@ static void on_window_opened (WnckScreen *screen,
return;
}
- GtkWidget *item = task_item_new (taskList->priv->windowPickerApplet, window);
-
- if (item) {
- //we add items dynamically to the end of the list
- gtk_container_add(GTK_CONTAINER(taskList), item);
- g_signal_connect (TASK_ITEM(item), "task-item-closed",
- G_CALLBACK(on_task_item_closed), taskList);
- }
+ create_task_item (taskList, window);
}
static void on_task_list_orient_changed(PanelApplet *applet,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]