1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
3
* libwnck based pager applet.
4
* (C) 2001 Alexander Larsson
5
* (C) 2001 Red Hat, Inc
7
* Authors: Alexander Larsson
11
#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
19
#include <panel-applet.h>
20
#include <panel-applet-gconf.h>
24
#include <glib/gi18n.h>
26
#include <libwnck/libwnck.h>
27
#include <gconf/gconf-client.h>
29
#include "workspace-switcher.h"
33
/* even 16 is pretty darn dubious. */
34
#define MAX_REASONABLE_ROWS 16
35
#define DEFAULT_ROWS 1
37
#define NEVER_SENSITIVE "never_sensitive"
38
#define NUM_WORKSPACES "/apps/metacity/general/num_workspaces"
39
#define WORKSPACE_NAME "/apps/metacity/workspace_names/name_1"
41
#define WORKSPACE_SWITCHER_ICON "gnome-panel-workspace-switcher"
58
GtkWidget *properties_dialog;
59
GtkWidget *workspaces_frame;
60
GtkWidget *workspace_names_label;
61
GtkWidget *workspace_names_scroll;
62
GtkWidget *display_workspaces_toggle;
63
GtkWidget *all_workspaces_radio;
64
GtkWidget *current_only_radio;
65
GtkWidget *num_rows_spin; /* for vertical layout this is cols */
66
GtkWidget *label_row_col;
67
GtkWidget *num_workspaces_spin;
68
GtkWidget *workspaces_tree;
69
GtkListStore *workspaces_store;
73
GtkOrientation orientation;
74
int n_rows; /* for vertical layout this is cols */
75
WnckPagerDisplayMode display_mode;
78
/* gconf listeners id */
82
static void display_properties_dialog (GtkAction *action,
84
static void display_help_dialog (GtkAction *action,
86
static void display_about_dialog (GtkAction *action,
90
pager_update (PagerData *pager)
92
wnck_pager_set_orientation (WNCK_PAGER (pager->pager),
94
wnck_pager_set_n_rows (WNCK_PAGER (pager->pager),
96
wnck_pager_set_show_all (WNCK_PAGER (pager->pager),
99
if (pager->wm == PAGER_WM_METACITY)
100
wnck_pager_set_display_mode (WNCK_PAGER (pager->pager),
101
pager->display_mode);
103
wnck_pager_set_display_mode (WNCK_PAGER (pager->pager),
104
WNCK_PAGER_DISPLAY_CONTENT);
108
update_properties_for_wm (PagerData *pager)
111
case PAGER_WM_METACITY:
112
if (pager->workspaces_frame)
113
gtk_widget_show (pager->workspaces_frame);
114
if (pager->workspace_names_label)
115
gtk_widget_show (pager->workspace_names_label);
116
if (pager->workspace_names_scroll)
117
gtk_widget_show (pager->workspace_names_scroll);
118
if (pager->display_workspaces_toggle)
119
gtk_widget_show (pager->display_workspaces_toggle);
121
case PAGER_WM_COMPIZ:
122
if (pager->workspaces_frame)
123
gtk_widget_show (pager->workspaces_frame);
124
if (pager->workspace_names_label)
125
gtk_widget_hide (pager->workspace_names_label);
126
if (pager->workspace_names_scroll)
127
gtk_widget_hide (pager->workspace_names_scroll);
128
if (pager->display_workspaces_toggle)
129
gtk_widget_hide (pager->display_workspaces_toggle);
131
case PAGER_WM_UNKNOWN:
132
if (pager->workspaces_frame)
133
gtk_widget_hide (pager->workspaces_frame);
136
g_assert_not_reached ();
139
if (pager->properties_dialog)
140
gtk_window_reshow_with_initial_size (GTK_WINDOW (pager->properties_dialog));
144
window_manager_changed (WnckScreen *screen,
149
wm_name = wnck_screen_get_window_manager_name (screen);
152
pager->wm = PAGER_WM_UNKNOWN;
153
else if (strcmp (wm_name, "Metacity") == 0)
154
pager->wm = PAGER_WM_METACITY;
155
else if (strcmp (wm_name, "Compiz") == 0)
156
pager->wm = PAGER_WM_COMPIZ;
158
pager->wm = PAGER_WM_UNKNOWN;
160
update_properties_for_wm (pager);
161
pager_update (pager);
165
applet_realized (PanelApplet *applet,
168
pager->screen = wncklet_get_screen (GTK_WIDGET (applet));
170
window_manager_changed (pager->screen, pager);
171
wncklet_connect_while_alive (pager->screen, "window_manager_changed",
172
G_CALLBACK (window_manager_changed),
178
applet_unrealized (PanelApplet *applet,
181
pager->screen = NULL;
182
pager->wm = PAGER_WM_UNKNOWN;
187
applet_change_orient (PanelApplet *applet,
188
PanelAppletOrient orient,
191
GtkOrientation new_orient;
194
case PANEL_APPLET_ORIENT_LEFT:
195
case PANEL_APPLET_ORIENT_RIGHT:
196
new_orient = GTK_ORIENTATION_VERTICAL;
198
case PANEL_APPLET_ORIENT_UP:
199
case PANEL_APPLET_ORIENT_DOWN:
201
new_orient = GTK_ORIENTATION_HORIZONTAL;
205
if (new_orient == pager->orientation)
208
pager->orientation = new_orient;
209
pager_update (pager);
210
if (pager->label_row_col)
211
gtk_label_set_text (GTK_LABEL (pager->label_row_col), pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
215
applet_change_background (PanelApplet *applet,
216
PanelAppletBackgroundType type,
222
case PANEL_NO_BACKGROUND:
223
wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager),
226
case PANEL_COLOR_BACKGROUND:
227
wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager),
230
case PANEL_PIXMAP_BACKGROUND:
231
wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager),
238
applet_scroll (PanelApplet *applet,
239
GdkEventScroll *event,
242
GdkScrollDirection absolute_direction;
248
if (event->type != GDK_SCROLL)
251
index = wnck_workspace_get_number (wnck_screen_get_active_workspace (pager->screen));
252
n_workspaces = wnck_screen_get_workspace_count (pager->screen);
253
n_columns = n_workspaces / pager->n_rows;
254
if (n_workspaces % pager->n_rows != 0)
256
in_last_row = n_workspaces % n_columns;
258
absolute_direction = event->direction;
259
if (gtk_widget_get_direction (GTK_WIDGET (applet)) == GTK_TEXT_DIR_RTL) {
260
switch (event->direction) {
261
case GDK_SCROLL_DOWN:
264
case GDK_SCROLL_RIGHT:
265
absolute_direction = GDK_SCROLL_LEFT;
267
case GDK_SCROLL_LEFT:
268
absolute_direction = GDK_SCROLL_RIGHT;
273
switch (absolute_direction) {
274
case GDK_SCROLL_DOWN:
275
if (index + n_columns < n_workspaces)
277
else if ((index < n_workspaces - 1
278
&& index + in_last_row != n_workspaces - 1) ||
279
(index == n_workspaces - 1
280
&& in_last_row != 0))
281
index = (index % n_columns) + 1;
284
case GDK_SCROLL_RIGHT:
285
if (index < n_workspaces - 1)
290
if (index - n_columns >= 0)
293
index = ((pager->n_rows - 1) * n_columns) + (index % n_columns) - 1;
294
if (index >= n_workspaces)
298
case GDK_SCROLL_LEFT:
303
g_assert_not_reached ();
307
wnck_workspace_activate (wnck_screen_get_workspace (pager->screen,
315
destroy_pager(GtkWidget * widget, PagerData *pager)
317
GConfClient *client = gconf_client_get_default ();
319
gconf_client_notify_remove (client, pager->listeners[0]);
320
gconf_client_notify_remove (client, pager->listeners[1]);
321
gconf_client_notify_remove (client, pager->listeners[2]);
323
g_object_unref (G_OBJECT (client));
325
pager->listeners[0] = 0;
326
pager->listeners[1] = 0;
327
pager->listeners[2] = 0;
329
if (pager->properties_dialog)
330
gtk_widget_destroy (pager->properties_dialog);
333
gtk_widget_destroy (pager->about);
338
static const GtkActionEntry pager_menu_actions [] = {
339
{ "PagerPreferences", GTK_STOCK_PROPERTIES, N_("_Preferences"),
341
G_CALLBACK (display_properties_dialog) },
342
{ "PagerHelp", GTK_STOCK_HELP, N_("_Help"),
344
G_CALLBACK (display_help_dialog) },
345
{ "PagerAbout", GTK_STOCK_ABOUT, N_("_About"),
347
G_CALLBACK (display_about_dialog) }
351
num_rows_changed (GConfClient *client,
356
int n_rows = DEFAULT_ROWS;
358
if (entry->value != NULL &&
359
entry->value->type == GCONF_VALUE_INT) {
360
n_rows = gconf_value_get_int (entry->value);
363
n_rows = CLAMP (n_rows, 1, MAX_REASONABLE_ROWS);
365
pager->n_rows = n_rows;
366
pager_update (pager);
368
if (pager->num_rows_spin &&
369
gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pager->num_rows_spin)) != n_rows)
370
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_rows_spin), pager->n_rows);
374
display_workspace_names_changed (GConfClient *client,
379
gboolean value = FALSE; /* Default value */
381
if (entry->value != NULL &&
382
entry->value->type == GCONF_VALUE_BOOL) {
383
value = gconf_value_get_bool (entry->value);
387
pager->display_mode = WNCK_PAGER_DISPLAY_NAME;
389
pager->display_mode = WNCK_PAGER_DISPLAY_CONTENT;
391
pager_update (pager);
393
if (pager->display_workspaces_toggle &&
394
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pager->display_workspaces_toggle)) != value) {
395
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->display_workspaces_toggle),
402
all_workspaces_changed (GConfClient *client,
407
gboolean value = TRUE; /* Default value */
409
if (entry->value != NULL &&
410
entry->value->type == GCONF_VALUE_BOOL) {
411
value = gconf_value_get_bool (entry->value);
414
pager->display_all = value;
415
pager_update (pager);
417
if (pager->all_workspaces_radio){
418
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pager->all_workspaces_radio)) != value) {
420
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->all_workspaces_radio), TRUE);
422
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->current_only_radio), TRUE);
425
if ( ! g_object_get_data (G_OBJECT (pager->num_rows_spin), NEVER_SENSITIVE))
426
gtk_widget_set_sensitive (pager->num_rows_spin, value);
431
setup_gconf (PagerData *pager)
436
client = gconf_client_get_default ();
438
key = panel_applet_gconf_get_full_key (PANEL_APPLET (pager->applet),
440
pager->listeners[0] = gconf_client_notify_add(client, key,
441
(GConfClientNotifyFunc)num_rows_changed,
448
key = panel_applet_gconf_get_full_key (PANEL_APPLET (pager->applet),
449
"display_workspace_names");
450
pager->listeners[1] = gconf_client_notify_add(client, key,
451
(GConfClientNotifyFunc)display_workspace_names_changed,
457
key = panel_applet_gconf_get_full_key (PANEL_APPLET (pager->applet),
458
"display_all_workspaces");
459
pager->listeners[2] = gconf_client_notify_add(client, key,
460
(GConfClientNotifyFunc)all_workspaces_changed,
466
g_object_unref (G_OBJECT (client));
471
workspace_switcher_applet_fill (PanelApplet *applet)
474
GtkActionGroup *action_group;
477
gboolean display_names;
479
panel_applet_add_preferences (applet, "/schemas/apps/workspace_switcher_applet/prefs", NULL);
481
pager = g_new0 (PagerData, 1);
483
pager->applet = GTK_WIDGET (applet);
485
panel_applet_set_flags (PANEL_APPLET (pager->applet), PANEL_APPLET_EXPAND_MINOR);
490
pager->n_rows = panel_applet_gconf_get_int (applet, "num_rows", &error);
492
g_printerr (_("Error loading num_rows value for Workspace Switcher: %s\n"),
494
g_error_free (error);
495
/* leave current value */
498
pager->n_rows = CLAMP (pager->n_rows, 1, MAX_REASONABLE_ROWS);
501
display_names = panel_applet_gconf_get_bool (applet, "display_workspace_names", &error);
503
g_printerr (_("Error loading display_workspace_names value for Workspace Switcher: %s\n"),
505
g_error_free (error);
506
/* leave current value */
510
pager->display_mode = WNCK_PAGER_DISPLAY_NAME;
512
pager->display_mode = WNCK_PAGER_DISPLAY_CONTENT;
516
pager->display_all = panel_applet_gconf_get_bool (applet, "display_all_workspaces", &error);
518
g_printerr (_("Error loading display_all_workspaces value for Workspace Switcher: %s\n"),
520
g_error_free (error);
521
/* leave current value */
524
switch (panel_applet_get_orient (applet)) {
525
case PANEL_APPLET_ORIENT_LEFT:
526
case PANEL_APPLET_ORIENT_RIGHT:
527
pager->orientation = GTK_ORIENTATION_VERTICAL;
529
case PANEL_APPLET_ORIENT_UP:
530
case PANEL_APPLET_ORIENT_DOWN:
532
pager->orientation = GTK_ORIENTATION_HORIZONTAL;
536
pager->pager = wnck_pager_new (NULL);
537
pager->screen = NULL;
538
pager->wm = PAGER_WM_UNKNOWN;
539
wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager), GTK_SHADOW_IN);
541
g_signal_connect (G_OBJECT (pager->pager), "destroy",
542
G_CALLBACK (destroy_pager),
545
gtk_container_add (GTK_CONTAINER (pager->applet), pager->pager);
546
gtk_widget_show (pager->pager);
548
g_signal_connect (G_OBJECT (pager->applet),
550
G_CALLBACK (applet_realized),
552
g_signal_connect (G_OBJECT (pager->applet),
554
G_CALLBACK (applet_unrealized),
556
g_signal_connect (G_OBJECT (pager->applet),
558
G_CALLBACK (applet_change_orient),
560
g_signal_connect (G_OBJECT (pager->applet),
562
G_CALLBACK (applet_scroll),
564
g_signal_connect (G_OBJECT (pager->applet),
566
G_CALLBACK (applet_change_background),
569
gtk_widget_show (pager->applet);
571
panel_applet_set_background_widget (PANEL_APPLET (pager->applet),
572
GTK_WIDGET (pager->applet));
574
action_group = gtk_action_group_new ("WorkspaceSwitcher Applet Actions");
575
gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
576
gtk_action_group_add_actions (action_group,
578
G_N_ELEMENTS (pager_menu_actions),
580
ui_path = g_build_filename (WNCK_MENU_UI_DIR, "workspace-switcher-menu.xml", NULL);
581
panel_applet_setup_menu_from_file (PANEL_APPLET (pager->applet),
582
ui_path, action_group);
585
if (panel_applet_get_locked_down (PANEL_APPLET (pager->applet))) {
588
action = gtk_action_group_get_action (action_group, "PagerPreferences");
589
gtk_action_set_visible (action, FALSE);
591
g_object_unref (action_group);
598
display_help_dialog (GtkAction *action,
601
wncklet_display_help (pager->applet, "user-guide",
602
"overview-workspaces", WORKSPACE_SWITCHER_ICON);
606
display_about_dialog (GtkAction *action,
609
static const gchar *authors[] =
611
"Alexander Larsson <alla@lysator.liu.se>",
614
const char *documenters [] = {
615
"John Fleck <jfleck@inkstain.net>",
616
"Sun GNOME Documentation Team <gdocteam@sun.com>",
619
const char *translator_credits = _("translator-credits");
621
wncklet_display_about (pager->applet, &pager->about,
622
_("Workspace Switcher"),
623
"Copyright \xc2\xa9 2001-2002 Red Hat, Inc.",
624
_("The Workspace Switcher shows you a small version of your workspaces that lets you manage your windows."),
628
WORKSPACE_SWITCHER_ICON,
635
display_workspace_names_toggled (GtkToggleButton *button,
638
panel_applet_gconf_set_bool (PANEL_APPLET (pager->applet),
639
"display_workspace_names",
640
gtk_toggle_button_get_active (button),
645
all_workspaces_toggled (GtkToggleButton *button,
648
panel_applet_gconf_set_bool (PANEL_APPLET (pager->applet),
649
"display_all_workspaces",
650
gtk_toggle_button_get_active (button),
655
num_rows_value_changed (GtkSpinButton *button,
658
panel_applet_gconf_set_int (PANEL_APPLET (pager->applet),
660
gtk_spin_button_get_value_as_int (button),
665
update_workspaces_model (PagerData *pager)
668
WnckWorkspace *workspace;
671
nr_ws = wnck_screen_get_workspace_count (pager->screen);
673
if (pager->properties_dialog) {
674
if (nr_ws != gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pager->num_workspaces_spin)))
675
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_workspaces_spin), nr_ws);
677
gtk_list_store_clear (pager->workspaces_store);
678
for (i = 0; i < nr_ws; i++) {
679
workspace = wnck_screen_get_workspace (pager->screen, i);
680
gtk_list_store_append (pager->workspaces_store, &iter);
681
gtk_list_store_set (pager->workspaces_store,
683
0, wnck_workspace_get_name (workspace),
690
workspace_renamed (WnckWorkspace *space,
696
i = wnck_workspace_get_number (space);
697
if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (pager->workspaces_store),
699
gtk_list_store_set (pager->workspaces_store,
701
0, wnck_workspace_get_name (space),
706
workspace_created (WnckScreen *screen,
707
WnckWorkspace *space,
710
g_return_if_fail (WNCK_IS_SCREEN (screen));
712
update_workspaces_model (pager);
714
wncklet_connect_while_alive (space, "name_changed",
715
G_CALLBACK(workspace_renamed),
717
pager->properties_dialog);
722
workspace_destroyed (WnckScreen *screen,
723
WnckWorkspace *space,
726
g_return_if_fail (WNCK_IS_SCREEN (screen));
727
update_workspaces_model (pager);
731
num_workspaces_value_changed (GtkSpinButton *button,
734
/* Slow down a bit after the first change, since it's moving really to
735
* fast. See bug #336731 for background.
736
* FIXME: remove this if bug 410520 gets fixed. */
737
button->timer_step = 0.2;
739
wnck_screen_change_workspace_count (pager->screen,
740
gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pager->num_workspaces_spin)));
744
workspaces_tree_focused_out (GtkTreeView *treeview,
745
GdkEventFocus *event,
748
GtkTreeSelection *selection;
750
selection = gtk_tree_view_get_selection (treeview);
751
gtk_tree_selection_unselect_all (selection);
756
workspace_name_edited (GtkCellRendererText *cell_renderer_text,
758
const gchar *new_text,
762
WnckWorkspace *workspace;
765
p = gtk_tree_path_new_from_string (path);
766
indices = gtk_tree_path_get_indices (p);
767
workspace = wnck_screen_get_workspace (pager->screen,
769
if (workspace != NULL) {
770
gchar* temp_name = g_strdup(new_text);
772
wnck_workspace_change_name (workspace,
773
g_strstrip(temp_name));
777
g_warning ("Edited name of workspace %d which no longer exists",
780
gtk_tree_path_free (p);
784
properties_dialog_destroyed (GtkWidget *widget,
787
pager->properties_dialog = NULL;
788
pager->workspaces_frame = NULL;
789
pager->workspace_names_label = NULL;
790
pager->workspace_names_scroll = NULL;
791
pager->display_workspaces_toggle = NULL;
792
pager->all_workspaces_radio = NULL;
793
pager->current_only_radio = NULL;
794
pager->num_rows_spin = NULL;
795
pager->label_row_col = NULL;
796
pager->num_workspaces_spin = NULL;
797
pager->workspaces_tree = NULL;
798
pager->workspaces_store = NULL;
802
delete_event (GtkWidget *widget, gpointer data)
804
gtk_widget_destroy (widget);
809
response_cb (GtkWidget *widget,
813
if (id == GTK_RESPONSE_HELP)
814
wncklet_display_help (widget, "user-guide",
815
"overview-workspaces",
816
WORKSPACE_SWITCHER_ICON);
818
gtk_widget_destroy (widget);
822
close_dialog (GtkWidget *button,
825
PagerData *pager = data;
826
GtkTreeViewColumn *col;
828
/* This is a hack. The "editable" signal for GtkCellRenderer is emitted
829
only on button press or focus cycle. Hence when the user changes the
830
name and closes the preferences dialog without a button-press he would
831
lose the name changes. So, we call the gtk_cell_editable_editing_done
832
to stop the editing. Thanks to Paolo for a better crack than the one I had.
835
col = gtk_tree_view_get_column(GTK_TREE_VIEW (pager->workspaces_tree),0);
836
if (col->editable_widget != NULL && GTK_IS_CELL_EDITABLE (col->editable_widget))
837
gtk_cell_editable_editing_done(col->editable_widget);
839
gtk_widget_destroy (pager->properties_dialog);
842
#define WID(s) GTK_WIDGET (gtk_builder_get_object (builder, s))
845
setup_sensitivity (PagerData *pager,
852
PanelApplet *applet = PANEL_APPLET (pager->applet);
853
GConfClient *client = gconf_client_get_default ();
858
fullkey = g_strdup (key);
860
fullkey = panel_applet_gconf_get_full_key (applet, key);
862
if (gconf_client_key_is_writable (client, fullkey, NULL)) {
863
g_object_unref (G_OBJECT (client));
867
g_object_unref (G_OBJECT (client));
871
g_assert (w != NULL);
872
g_object_set_data (G_OBJECT (w), NEVER_SENSITIVE,
873
GINT_TO_POINTER (1));
874
gtk_widget_set_sensitive (w, FALSE);
878
g_assert (w != NULL);
879
g_object_set_data (G_OBJECT (w), NEVER_SENSITIVE,
880
GINT_TO_POINTER (1));
881
gtk_widget_set_sensitive (w, FALSE);
885
g_assert (w != NULL);
886
g_object_set_data (G_OBJECT (w), NEVER_SENSITIVE,
887
GINT_TO_POINTER (1));
888
gtk_widget_set_sensitive (w, FALSE);
894
setup_dialog (GtkBuilder *builder,
898
GtkTreeViewColumn *column;
899
GtkCellRenderer *cell;
902
pager->workspaces_frame = WID ("workspaces_frame");
903
pager->workspace_names_label = WID ("workspace_names_label");
904
pager->workspace_names_scroll = WID ("workspace_names_scroll");
906
pager->display_workspaces_toggle = WID ("workspace_name_toggle");
907
setup_sensitivity (pager, builder,
908
"workspace_name_toggle",
911
"display_workspace_names" /* key */);
913
pager->all_workspaces_radio = WID ("all_workspaces_radio");
914
pager->current_only_radio = WID ("current_only_radio");
915
setup_sensitivity (pager, builder,
916
"all_workspaces_radio",
917
"current_only_radio",
919
"display_all_workspaces" /* key */);
921
pager->num_rows_spin = WID ("num_rows_spin");
922
pager->label_row_col = WID("label_row_col");
923
setup_sensitivity (pager, builder,
927
"num_rows" /* key */);
929
pager->num_workspaces_spin = WID ("num_workspaces_spin");
930
setup_sensitivity (pager, builder,
931
"num_workspaces_spin",
934
NUM_WORKSPACES /* key */);
936
pager->workspaces_tree = WID ("workspaces_tree_view");
937
setup_sensitivity (pager, builder,
938
"workspaces_tree_view",
941
WORKSPACE_NAME /* key */);
943
/* Display workspace names: */
945
g_signal_connect (G_OBJECT (pager->display_workspaces_toggle), "toggled",
946
(GCallback) display_workspace_names_toggled, pager);
948
if (pager->display_mode == WNCK_PAGER_DISPLAY_NAME) {
953
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->display_workspaces_toggle),
956
/* Display all workspaces: */
957
g_signal_connect (G_OBJECT (pager->all_workspaces_radio), "toggled",
958
(GCallback) all_workspaces_toggled, pager);
960
if (pager->display_all) {
961
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->all_workspaces_radio), TRUE);
962
if ( ! g_object_get_data (G_OBJECT (pager->num_rows_spin), NEVER_SENSITIVE))
963
gtk_widget_set_sensitive (pager->num_rows_spin, TRUE);
965
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->current_only_radio), TRUE);
966
gtk_widget_set_sensitive (pager->num_rows_spin, FALSE);
970
g_signal_connect (G_OBJECT (pager->num_rows_spin), "value_changed",
971
(GCallback) num_rows_value_changed, pager);
973
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_rows_spin), pager->n_rows);
974
gtk_label_set_text (GTK_LABEL (pager->label_row_col), pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
976
g_signal_connect (pager->properties_dialog, "destroy",
977
G_CALLBACK (properties_dialog_destroyed),
979
g_signal_connect (pager->properties_dialog, "delete_event",
980
G_CALLBACK (delete_event),
982
g_signal_connect (pager->properties_dialog, "response",
983
G_CALLBACK (response_cb),
986
g_signal_connect (WID ("done_button"), "clicked",
987
(GCallback) close_dialog, pager);
989
gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_workspaces_spin),
990
wnck_screen_get_workspace_count (pager->screen));
991
g_signal_connect (G_OBJECT (pager->num_workspaces_spin), "value_changed",
992
(GCallback) num_workspaces_value_changed, pager);
994
wncklet_connect_while_alive (pager->screen, "workspace_created",
995
G_CALLBACK(workspace_created),
997
pager->properties_dialog);
999
wncklet_connect_while_alive (pager->screen, "workspace_destroyed",
1000
G_CALLBACK(workspace_destroyed),
1002
pager->properties_dialog);
1004
g_signal_connect (G_OBJECT (pager->workspaces_tree), "focus_out_event",
1005
(GCallback) workspaces_tree_focused_out, pager);
1007
pager->workspaces_store = gtk_list_store_new (1, G_TYPE_STRING, NULL);
1008
update_workspaces_model (pager);
1009
gtk_tree_view_set_model (GTK_TREE_VIEW (pager->workspaces_tree), GTK_TREE_MODEL (pager->workspaces_store));
1011
g_object_unref (pager->workspaces_store);
1013
cell = g_object_new (GTK_TYPE_CELL_RENDERER_TEXT, "editable", TRUE, NULL);
1014
column = gtk_tree_view_column_new_with_attributes ("workspace",
1018
gtk_tree_view_append_column (GTK_TREE_VIEW (pager->workspaces_tree), column);
1019
g_signal_connect (cell, "edited",
1020
(GCallback) workspace_name_edited, pager);
1022
nr_ws = wnck_screen_get_workspace_count (pager->screen);
1023
for (i = 0; i < nr_ws; i++) {
1024
wncklet_connect_while_alive (
1025
G_OBJECT (wnck_screen_get_workspace (pager->screen, i)),
1027
G_CALLBACK(workspace_renamed),
1029
pager->properties_dialog);
1032
update_properties_for_wm (pager);
1036
display_properties_dialog (GtkAction *action,
1039
if (pager->properties_dialog == NULL) {
1040
GtkBuilder *builder;
1043
builder = gtk_builder_new ();
1044
gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
1047
gtk_builder_add_from_file (builder, PAGER_BUILDERDIR "/workspace-switcher.ui", &error);
1049
g_warning ("Error loading preferences: %s", error->message);
1050
g_error_free (error);
1054
pager->properties_dialog = WID ("pager_properties_dialog");
1056
g_object_add_weak_pointer (G_OBJECT (pager->properties_dialog),
1057
(gpointer *) &pager->properties_dialog);
1059
setup_dialog (builder, pager);
1061
g_object_unref (builder);
1064
gtk_window_set_icon_name (GTK_WINDOW (pager->properties_dialog),
1065
WORKSPACE_SWITCHER_ICON);
1066
gtk_window_set_screen (GTK_WINDOW (pager->properties_dialog),
1067
gtk_widget_get_screen (pager->applet));
1068
gtk_window_present (GTK_WINDOW (pager->properties_dialog));