1
Description: Allow the workspace switcher to change the desktop layout when using compiz
2
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=496830
4
Index: gnome-panel-2.32.0/applets/wncklet/workspace-switcher.c
5
===================================================================
6
--- gnome-panel-2.32.0.orig/applets/wncklet/workspace-switcher.c 2010-07-01 20:15:31.000000000 +0200
7
+++ gnome-panel-2.32.0/applets/wncklet/workspace-switcher.c 2010-10-15 18:43:16.624592197 +0200
9
#define MAX_REASONABLE_ROWS 16
10
#define DEFAULT_ROWS 1
12
+#define COMPIZ_OPTIONS "/apps/compiz-1/general/screen0/options"
13
+#define COMPIZ_HSIZE "/apps/compiz-1/general/screen0/options/hsize"
14
+#define COMPIZ_VSIZE "/apps/compiz-1/general/screen0/options/vsize"
16
#define NEVER_SENSITIVE "never_sensitive"
17
#define NUM_WORKSPACES "/apps/metacity/general/num_workspaces"
18
#define WORKSPACE_NAME "/apps/metacity/workspace_names/name_1"
22
GtkWidget *properties_dialog;
23
+ GtkWidget *switcher_frame;
24
GtkWidget *workspaces_frame;
25
GtkWidget *workspace_names_label;
26
GtkWidget *workspace_names_scroll;
28
GtkWidget *num_workspaces_spin;
29
GtkWidget *workspaces_tree;
30
GtkListStore *workspaces_store;
31
+ GtkWidget *viewports_frame;
32
+ GtkWidget *hsize_spin;
33
+ GtkWidget *vsize_spin;
39
wnck_pager_set_n_rows (WNCK_PAGER (pager->pager),
41
- wnck_pager_set_show_all (WNCK_PAGER (pager->pager),
42
- pager->display_all);
44
+ if (pager->wm == PAGER_WM_COMPIZ)
45
+ wnck_pager_set_show_all (WNCK_PAGER (pager->pager),
48
+ wnck_pager_set_show_all (WNCK_PAGER (pager->pager),
49
+ pager->display_all);
51
if (pager->wm == PAGER_WM_METACITY)
52
wnck_pager_set_display_mode (WNCK_PAGER (pager->pager),
54
gtk_widget_show (pager->workspace_names_scroll);
55
if (pager->display_workspaces_toggle)
56
gtk_widget_show (pager->display_workspaces_toggle);
57
+ if (pager->viewports_frame)
58
+ gtk_widget_hide (pager->viewports_frame);
61
+ if (pager->switcher_frame)
62
+ gtk_widget_hide (pager->switcher_frame);
63
if (pager->workspaces_frame)
64
- gtk_widget_show (pager->workspaces_frame);
65
+ gtk_widget_hide (pager->workspaces_frame);
66
if (pager->workspace_names_label)
67
gtk_widget_hide (pager->workspace_names_label);
68
if (pager->workspace_names_scroll)
69
gtk_widget_hide (pager->workspace_names_scroll);
70
if (pager->display_workspaces_toggle)
71
gtk_widget_hide (pager->display_workspaces_toggle);
72
+ if (pager->viewports_frame)
73
+ gtk_widget_show (pager->viewports_frame);
75
case PAGER_WM_UNKNOWN:
76
if (pager->workspaces_frame)
77
gtk_widget_hide (pager->workspaces_frame);
78
+ if (pager->viewports_frame)
79
+ gtk_widget_hide (pager->viewports_frame);
82
g_assert_not_reached ();
84
pager->orientation = new_orient;
86
if (pager->label_row_col)
87
- gtk_label_set_text (GTK_LABEL (pager->label_row_col), pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
88
+ gtk_label_set_text (GTK_LABEL (pager->label_row_col),
89
+ pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
97
+/* compiz' "columns" */
99
+hsize_value_changed (GtkSpinButton *button,
102
+ GConfClient* client = gconf_client_get_default ();
104
+ gconf_client_set_int (client,
106
+ gtk_spin_button_get_value_as_int (button),
108
+ g_object_unref (client);
111
+/* compiz' "rows" */
113
+vsize_value_changed (GtkSpinButton *button,
116
+ GConfClient* client = gconf_client_get_default ();
118
+ gconf_client_set_int (client,
120
+ gtk_spin_button_get_value_as_int (button),
122
+ g_object_unref (client);
126
update_workspaces_model (PagerData *pager)
131
pager->properties_dialog = NULL;
132
+ pager->switcher_frame = NULL;
133
pager->workspaces_frame = NULL;
134
pager->workspace_names_label = NULL;
135
pager->workspace_names_scroll = NULL;
137
pager->num_workspaces_spin = NULL;
138
pager->workspaces_tree = NULL;
139
pager->workspaces_store = NULL;
140
+ pager->viewports_frame = NULL;
141
+ pager->hsize_spin = NULL;
142
+ pager->vsize_spin = NULL;
146
@@ -898,13 +952,49 @@
147
GtkTreeViewColumn *column;
148
GtkCellRenderer *cell;
151
+ GConfClient* client = NULL;
155
+ pager->switcher_frame = WID ("switcher_frame");
156
pager->workspaces_frame = WID ("workspaces_frame");
157
pager->workspace_names_label = WID ("workspace_names_label");
158
pager->workspace_names_scroll = WID ("workspace_names_scroll");
160
+ if (pager->wm == PAGER_WM_COMPIZ)
162
+ client = gconf_client_get_default ();
164
+ pager->viewports_frame = WID ("viewports_frame");
165
+ pager->hsize_spin = WID ("hsize_spin");
166
+ pager->vsize_spin = WID ("vsize_spin");
168
+ g_signal_connect (G_OBJECT (pager->hsize_spin),
170
+ (GCallback) hsize_value_changed,
173
+ g_signal_connect (G_OBJECT (pager->vsize_spin),
175
+ (GCallback) vsize_value_changed,
178
+ /* set value for hsize (compiz's "columns") */
179
+ hsize = gconf_client_get_int (client, COMPIZ_HSIZE, NULL);
180
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->hsize_spin),
183
+ /* set value for vsize (compiz's "rows") */
184
+ vsize = gconf_client_get_int (client, COMPIZ_VSIZE, NULL);
185
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->vsize_spin),
188
+ g_object_unref (client);
191
pager->display_workspaces_toggle = WID ("workspace_name_toggle");
192
- setup_sensitivity (pager, builder,
193
+ setup_sensitivity (pager,
195
"workspace_name_toggle",
200
pager->all_workspaces_radio = WID ("all_workspaces_radio");
201
pager->current_only_radio = WID ("current_only_radio");
202
- setup_sensitivity (pager, builder,
203
+ setup_sensitivity (pager,
205
"all_workspaces_radio",
206
"current_only_radio",
208
@@ -920,14 +1011,16 @@
210
pager->num_rows_spin = WID ("num_rows_spin");
211
pager->label_row_col = WID("label_row_col");
212
- setup_sensitivity (pager, builder,
213
+ setup_sensitivity (pager,
218
"num_rows" /* key */);
220
pager->num_workspaces_spin = WID ("num_workspaces_spin");
221
- setup_sensitivity (pager, builder,
222
+ setup_sensitivity (pager,
224
"num_workspaces_spin",
227
@@ -941,92 +1034,130 @@
228
WORKSPACE_NAME /* key */);
230
/* Display workspace names: */
232
- g_signal_connect (G_OBJECT (pager->display_workspaces_toggle), "toggled",
233
- (GCallback) display_workspace_names_toggled, pager);
234
+ g_signal_connect (G_OBJECT (pager->display_workspaces_toggle),
236
+ (GCallback) display_workspace_names_toggled,
239
- if (pager->display_mode == WNCK_PAGER_DISPLAY_NAME) {
240
+ if (pager->display_mode == WNCK_PAGER_DISPLAY_NAME)
247
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->display_workspaces_toggle),
250
/* Display all workspaces: */
251
- g_signal_connect (G_OBJECT (pager->all_workspaces_radio), "toggled",
252
- (GCallback) all_workspaces_toggled, pager);
253
+ g_signal_connect (G_OBJECT (pager->all_workspaces_radio),
255
+ (GCallback) all_workspaces_toggled,
258
- if (pager->display_all) {
259
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->all_workspaces_radio), TRUE);
260
- if ( ! g_object_get_data (G_OBJECT (pager->num_rows_spin), NEVER_SENSITIVE))
261
- gtk_widget_set_sensitive (pager->num_rows_spin, TRUE);
263
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->current_only_radio), TRUE);
264
- gtk_widget_set_sensitive (pager->num_rows_spin, FALSE);
265
+ if (pager->display_all)
267
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->all_workspaces_radio),
270
+ if (!g_object_get_data (G_OBJECT (pager->num_rows_spin),
272
+ gtk_widget_set_sensitive (pager->num_rows_spin,
278
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->current_only_radio),
280
+ gtk_widget_set_sensitive (pager->num_rows_spin,
285
- g_signal_connect (G_OBJECT (pager->num_rows_spin), "value_changed",
286
- (GCallback) num_rows_value_changed, pager);
287
+ g_signal_connect (G_OBJECT (pager->num_rows_spin),
289
+ (GCallback) num_rows_value_changed,
292
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_rows_spin), pager->n_rows);
293
- gtk_label_set_text (GTK_LABEL (pager->label_row_col), pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
294
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_rows_spin),
296
+ gtk_label_set_text (GTK_LABEL (pager->label_row_col),
297
+ pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
299
- g_signal_connect (pager->properties_dialog, "destroy",
300
+ g_signal_connect (pager->properties_dialog,
302
G_CALLBACK (properties_dialog_destroyed),
304
- g_signal_connect (pager->properties_dialog, "delete_event",
305
+ g_signal_connect (pager->properties_dialog,
307
G_CALLBACK (delete_event),
309
- g_signal_connect (pager->properties_dialog, "response",
310
+ g_signal_connect (pager->properties_dialog,
312
G_CALLBACK (response_cb),
315
- g_signal_connect (WID ("done_button"), "clicked",
316
- (GCallback) close_dialog, pager);
318
+ g_signal_connect (WID ("done_button"),
320
+ (GCallback) close_dialog,
323
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_workspaces_spin),
324
wnck_screen_get_workspace_count (pager->screen));
325
- g_signal_connect (G_OBJECT (pager->num_workspaces_spin), "value_changed",
326
- (GCallback) num_workspaces_value_changed, pager);
328
- wncklet_connect_while_alive (pager->screen, "workspace_created",
329
- G_CALLBACK(workspace_created),
330
+ g_signal_connect (G_OBJECT (pager->num_workspaces_spin),
332
+ (GCallback) num_workspaces_value_changed,
335
+ wncklet_connect_while_alive (pager->screen,
336
+ "workspace_created",
337
+ G_CALLBACK (workspace_created),
339
pager->properties_dialog);
341
- wncklet_connect_while_alive (pager->screen, "workspace_destroyed",
342
- G_CALLBACK(workspace_destroyed),
343
+ wncklet_connect_while_alive (pager->screen,
344
+ "workspace_destroyed",
345
+ G_CALLBACK (workspace_destroyed),
347
pager->properties_dialog);
349
- g_signal_connect (G_OBJECT (pager->workspaces_tree), "focus_out_event",
350
- (GCallback) workspaces_tree_focused_out, pager);
351
+ g_signal_connect (G_OBJECT (pager->workspaces_tree),
353
+ (GCallback) workspaces_tree_focused_out,
356
- pager->workspaces_store = gtk_list_store_new (1, G_TYPE_STRING, NULL);
357
+ pager->workspaces_store = gtk_list_store_new (1,
360
update_workspaces_model (pager);
361
- gtk_tree_view_set_model (GTK_TREE_VIEW (pager->workspaces_tree), GTK_TREE_MODEL (pager->workspaces_store));
362
+ gtk_tree_view_set_model (GTK_TREE_VIEW (pager->workspaces_tree),
363
+ GTK_TREE_MODEL (pager->workspaces_store));
365
g_object_unref (pager->workspaces_store);
367
- cell = g_object_new (GTK_TYPE_CELL_RENDERER_TEXT, "editable", TRUE, NULL);
368
+ cell = g_object_new (GTK_TYPE_CELL_RENDERER_TEXT,
372
column = gtk_tree_view_column_new_with_attributes ("workspace",
378
- gtk_tree_view_append_column (GTK_TREE_VIEW (pager->workspaces_tree), column);
379
- g_signal_connect (cell, "edited",
380
- (GCallback) workspace_name_edited, pager);
382
+ gtk_tree_view_append_column (GTK_TREE_VIEW (pager->workspaces_tree),
384
+ g_signal_connect (cell,
386
+ (GCallback) workspace_name_edited,
389
nr_ws = wnck_screen_get_workspace_count (pager->screen);
390
- for (i = 0; i < nr_ws; i++) {
391
- wncklet_connect_while_alive (
392
- G_OBJECT (wnck_screen_get_workspace (pager->screen, i)),
394
- G_CALLBACK(workspace_renamed),
396
- pager->properties_dialog);
397
+ for (i = 0; i < nr_ws; i++)
399
+ wncklet_connect_while_alive (G_OBJECT (wnck_screen_get_workspace (pager->screen,
402
+ G_CALLBACK (workspace_renamed),
404
+ pager->properties_dialog);
407
update_properties_for_wm (pager);
408
Index: gnome-panel-2.32.0/applets/wncklet/workspace-switcher.ui
409
===================================================================
410
--- gnome-panel-2.32.0.orig/applets/wncklet/workspace-switcher.ui 2010-02-09 13:32:08.000000000 +0100
411
+++ gnome-panel-2.32.0/applets/wncklet/workspace-switcher.ui 2010-10-15 18:43:16.624592197 +0200
413
<property name="orientation">vertical</property>
414
<property name="spacing">12</property>
416
- <object class="GtkFrame" id="frame1">
417
+ <object class="GtkFrame" id="switcher_frame">
418
<property name="visible">True</property>
419
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
420
<property name="label_xalign">0</property>
421
@@ -253,6 +253,114 @@
422
<property name="position">1</property>
426
+ <object class="GtkFrame" id="viewports_frame">
427
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
428
+ <property name="no_show_all">True</property>
429
+ <property name="label_xalign">0</property>
430
+ <property name="shadow_type">none</property>
432
+ <object class="GtkAlignment" id="viewports_alignment">
433
+ <property name="visible">True</property>
434
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
435
+ <property name="left_padding">12</property>
437
+ <object class="GtkVBox" id="viewports_vbox">
438
+ <property name="visible">True</property>
439
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
440
+ <property name="spacing">6</property>
442
+ <object class="GtkTable" id="viewports_table">
443
+ <property name="visible">True</property>
444
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
445
+ <property name="n_rows">2</property>
446
+ <property name="n_columns">2</property>
447
+ <property name="column_spacing">6</property>
448
+ <property name="row_spacing">6</property>
450
+ <object class="GtkLabel" id="hsize_label">
451
+ <property name="visible">True</property>
452
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
453
+ <property name="label" translatable="yes">Co_lumns:</property>
454
+ <property name="use_underline">True</property>
455
+ <property name="mnemonic_widget">hsize_spin</property>
458
+ <property name="x_options"></property>
459
+ <property name="y_options"></property>
463
+ <object class="GtkSpinButton" id="hsize_spin">
464
+ <property name="visible">True</property>
465
+ <property name="can_focus">True</property>
466
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
467
+ <property name="adjustment">hsize_spin_adjustment</property>
468
+ <property name="climb_rate">1</property>
471
+ <property name="left_attach">1</property>
472
+ <property name="right_attach">2</property>
473
+ <property name="x_options"></property>
474
+ <property name="y_options"></property>
478
+ <object class="GtkLabel" id="vsize_label">
479
+ <property name="visible">True</property>
480
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
481
+ <property name="label" translatable="yes">_Rows:</property>
482
+ <property name="use_underline">True</property>
483
+ <property name="mnemonic_widget">vsize_spin</property>
486
+ <property name="top_attach">1</property>
487
+ <property name="bottom_attach">2</property>
488
+ <property name="x_options"></property>
489
+ <property name="y_options"></property>
493
+ <object class="GtkSpinButton" id="vsize_spin">
494
+ <property name="visible">True</property>
495
+ <property name="can_focus">True</property>
496
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
497
+ <property name="adjustment">vsize_spin_adjustment</property>
498
+ <property name="climb_rate">1</property>
501
+ <property name="left_attach">1</property>
502
+ <property name="right_attach">2</property>
503
+ <property name="top_attach">1</property>
504
+ <property name="bottom_attach">2</property>
505
+ <property name="x_options"></property>
506
+ <property name="y_options"></property>
511
+ <property name="expand">False</property>
512
+ <property name="fill">False</property>
513
+ <property name="position">0</property>
520
+ <child type="label">
521
+ <object class="GtkLabel" id="label_viewports">
522
+ <property name="visible">True</property>
523
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
524
+ <property name="label" translatable="yes"><b>Workspaces</b></property>
525
+ <property name="use_markup">True</property>
530
+ <property name="position">2</property>
535
<property name="position">1</property>
537
<property name="value">1</property>
538
<property name="lower">1</property>
539
<property name="upper">16</property>
540
+ <property name="step_increment">1</property>
541
+ <property name="page_increment">10</property>
543
+ <object class="GtkAdjustment" id="hsize_spin_adjustment">
544
+ <property name="value">1</property>
545
+ <property name="lower">1</property>
546
+ <property name="upper">16</property>
547
+ <property name="step_increment">1</property>
548
+ <property name="page_increment">10</property>
550
+ <object class="GtkAdjustment" id="vsize_spin_adjustment">
551
+ <property name="value">1</property>
552
+ <property name="lower">1</property>
553
+ <property name="upper">16</property>
554
<property name="step_increment">1</property>
555
<property name="page_increment">10</property>
557
Index: gnome-panel-2.32.0/gnome-panel/main.c
558
===================================================================
559
--- gnome-panel-2.32.0.orig/gnome-panel/main.c 2010-06-23 01:00:28.000000000 +0200
560
+++ gnome-panel-2.32.0/gnome-panel/main.c 2010-10-15 18:43:16.624592197 +0200
562
GCONF_CLIENT_PRELOAD_NONE,
565
+ gconf_client_add_dir (panel_gconf_get_client (),
566
+ "/apps/compiz-1/general/screen0/options",
567
+ GCONF_CLIENT_PRELOAD_NONE,
570
panel_global_config_load ();
571
panel_lockdown_init ();
572
panel_profile_load ();
574
panel_lockdown_finalize ();
576
gconf_client_remove_dir (panel_gconf_get_client (),
577
+ "/apps/compiz-1/general/screen0/options",
580
+ gconf_client_remove_dir (panel_gconf_get_client (),
581
"/desktop/gnome/interface",