1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
diff -ur libwnck-2.8.1/libwnck/tasklist.c libwnck-2.8.1-patched/libwnck/tasklist.c
--- libwnck-2.8.1/libwnck/tasklist.c 2004-09-21 22:07:25.000000000 +0800
+++ libwnck-2.8.1-patched/libwnck/tasklist.c 2004-12-29 12:15:02.720282672 +0800
@@ -261,6 +261,11 @@
static gpointer task_parent_class;
static gpointer tasklist_parent_class;
+/* Keep track of tasklist instances so we can decide
+ * whether to show windows from all monitors
+ */
+static GSList *tasklist_instances;
+
/**
* eel_gtk_label_make_bold.
*
@@ -517,6 +522,11 @@
atk_obj = gtk_widget_get_accessible (widget);
atk_object_set_name (atk_obj, _("Window List"));
atk_object_set_description (atk_obj, _("Tool to switch between visible windows"));
+
+ tasklist_instances = g_slist_append (tasklist_instances, tasklist);
+ g_slist_foreach( tasklist_instances,
+ (GFunc) wnck_tasklist_update_lists,
+ NULL);
}
static void
@@ -546,6 +556,11 @@
tasklist = WNCK_TASKLIST (object);
+ tasklist_instances = g_slist_remove (tasklist_instances, tasklist);
+ g_slist_foreach (tasklist_instances,
+ (GFunc) wnck_tasklist_update_lists,
+ NULL);
+
if (tasklist->priv->free_icon_loader_data != NULL)
(* tasklist->priv->free_icon_loader_data) (tasklist->priv->icon_loader_data);
@@ -1498,26 +1513,42 @@
GList *l;
WnckTask *win_task;
WnckTask *class_group_task;
- gint monitor_num;
wnck_tasklist_free_tasks (tasklist);
- windows = wnck_screen_get_windows (tasklist->priv->screen);
-
if (GTK_WIDGET (tasklist)->window != NULL)
{
- monitor_num = gdk_screen_get_monitor_at_window (_wnck_screen_get_gdk_screen (tasklist->priv->screen),
- GTK_WIDGET (tasklist)->window);
- if (monitor_num != tasklist->priv->monitor_num)
- {
- tasklist->priv->monitor_num = monitor_num;
- gdk_screen_get_monitor_geometry (_wnck_screen_get_gdk_screen (tasklist->priv->screen),
- tasklist->priv->monitor_num,
- &tasklist->priv->monitor_geometry);
+
+ /*
+ * only show windows from this monitor if there is more than one tasklist running
+ */
+ if (tasklist_instances == NULL ||
+ tasklist_instances->next == NULL)
+ {
+ tasklist->priv->monitor_num = -1;
}
+ else
+ {
+ int monitor_num;
+
+ monitor_num = gdk_screen_get_monitor_at_window (
+ _wnck_screen_get_gdk_screen (tasklist->priv->screen),
+ GTK_WIDGET (tasklist)->window);
+
+ if (monitor_num != tasklist->priv->monitor_num)
+ {
+ tasklist->priv->monitor_num = monitor_num;
+ gdk_screen_get_monitor_geometry (
+ _wnck_screen_get_gdk_screen (
+ tasklist->priv->screen),
+ tasklist->priv->monitor_num,
+ &tasklist->priv->monitor_geometry);
+ }
+ }
+
}
- l = windows;
+ l = windows = wnck_screen_get_windows (tasklist->priv->screen);
while (l != NULL)
{
win = WNCK_WINDOW (l->data);
|