~ubuntu-branches/ubuntu/oneiric/gnome-panel/oneiric

« back to all changes in this revision

Viewing changes to applets/wncklet/workspace-switcher.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher, Sebastien Bacher, Jeremy Bicha
  • Date: 2011-05-30 11:04:49 UTC
  • mfrom: (1.13.10 upstream) (2.2.5 experimental)
  • Revision ID: james.westby@ubuntu.com-20110530110449-hinl17kxkcefjw6x
Tags: 1:3.0.2-0ubuntu1
[ Sebastien Bacher ]
* New upstream version
* debian/control.in:
  - the new libgweather version is in oneiric, use it
  - drop the python and python-gconf depends, 
    they were added for gnome-panel-add which is still using gconf and buggy
* debian/gnome-panel-data.install:
  - don't install the apport hook, it's only getting gconf datas which 
    doesn't work since gnome-panel uses gsettings
* debian/patches/90_build_fixes.patch:
  - restore build fix from git not applied in the new serie
* debian/patches/01_panel_submenus.patch:
  - don't take that Debian diff, the .menus use the upstream naming in Ubuntu
* debian/patches/06_no_resize_grip.patch:
  - dropped, the issue is fixed in the new version
* debian/patches/50_fix-potfiles.patch:
  - dropped, the issue is fixed in the new version
* debian/watch:
  - track unstable series as well

Drop those delta, since gnome-panel is not the default Ubuntu session now we
can go back to an experience closer to the upstream one: 
* debian/control.in:
  - drop the indicators recommends, unity-2d is the ubuntu fallback session
    so we can get back to use an upstream config for gnome-panel and reduce
    the delta we carry
* debian/patches/04_default_panel_config.patch:
  - don't modify the upstream layout
* debian/patches/05_no_session_delay.patch:
  - no need to tweak the upstream session to optimize it
* debian/patches/16_compiz_workspace_switcher.patch:
  - go back to the upstream switcher behaviour    
* debian/patches/25_dynamic_fusa_detection.patch:
  - not needed since we use the upstream layout, could be ported if someone
    is wanting to do the work though
* debian/patches/30_disable-initial-animation.patch, debian/rules:
  - drop the --disable-initial-animation, that was some login optimization
    but since it's not the default desktop you should go back to the 
    upstream behaviour

[ Jeremy Bicha ]   
* New upstream version
* Merge from Debian experimental, remaining Ubuntu changes:
* debian/control:
  - Recommends gnome-settings-daemon which has the timezone polkit service
* debian/rules:
  - Update translations template.
* debian/gnome-panel-data.install:
  - Install apport hook
  - Install the "About Ubuntu" menu item.
* debian/patches/01_layout.patch:
  - Disabled, Help & About Ubuntu don't fit as well in Gnome Panel 3
* debian/patches/01_panel_submenus.patch.
  - Dropped
* debian/patches/03_dnd_places_link.patch:
  - Disabled, when using Drag'n'Drop from Places menu, install a link launcher
    (.desktop file) instead of copying the entire directory.
* debian/patches/17_about-ubuntu-translation.patch:
  - List ubuntu-about.desktop for translation.
* debian/patches/40_unset_menuproxy.patch:
  - Make sure gnome-panel and the applets don't pick up menu proxies.
* debian/patches/50_fix-potfiles.patch
  - Fix i18n
* debian/patches/85_disable_shutdown_on_ltsp.patch:
  - Suppress the shutdown option in the panel if LTSP_CLIENT is set.
* debian/patches/71_change_bookmark_submenu_limit_value.patch
  - Dropped, picked up by Debian
* debian/patches/18_lockdown_lock_editor.patch:
* debian/patches/90_git_wnck_show_realize.patch:
* debian/patches/90_fix_linking_DSO_link.patch:
* debian/patches/91_gir_annotations.patch
* debian/patches/92_git_calendar_day.patch
* debian/patches/92_git_fix_applets_in_multiscreen.patch:
  - Dropped, applied upstream
* debian/watch:
  - watch unstable versions

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 *
9
9
 */
10
10
 
11
 
#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
12
 
 
13
11
#ifdef HAVE_CONFIG_H
14
12
#include <config.h>
15
13
#endif
17
15
#include <string.h>
18
16
 
19
17
#include <panel-applet.h>
20
 
#include <panel-applet-gconf.h>
21
18
 
22
19
#include <stdlib.h>
23
20
 
24
21
#include <glib/gi18n.h>
25
22
#include <gtk/gtk.h>
26
23
#include <libwnck/libwnck.h>
27
 
#include <gconf/gconf-client.h>
28
24
 
29
25
#include "workspace-switcher.h"
30
26
 
31
27
#include "wncklet.h"
32
28
 
33
 
/* even 16 is pretty darn dubious. */
34
 
#define MAX_REASONABLE_ROWS 16
35
 
#define DEFAULT_ROWS 1
36
 
 
37
 
#define COMPIZ_OPTIONS "/apps/compiz-1/general/screen0/options"
38
 
#define COMPIZ_HSIZE "/apps/compiz-1/general/screen0/options/hsize"
39
 
#define COMPIZ_VSIZE "/apps/compiz-1/general/screen0/options/vsize"
40
 
 
41
29
#define NEVER_SENSITIVE "never_sensitive"
42
 
#define NUM_WORKSPACES "/apps/metacity/general/num_workspaces"
43
 
#define WORKSPACE_NAME "/apps/metacity/workspace_names/name_1"
44
30
 
45
31
#define WORKSPACE_SWITCHER_ICON "gnome-panel-workspace-switcher"
46
32
 
60
46
 
61
47
        /* Properties: */
62
48
        GtkWidget *properties_dialog;
63
 
        GtkWidget *switcher_frame;
64
49
        GtkWidget *workspaces_frame;
65
50
        GtkWidget *workspace_names_label;
66
51
        GtkWidget *workspace_names_scroll;
72
57
        GtkWidget *num_workspaces_spin;
73
58
        GtkWidget *workspaces_tree;
74
59
        GtkListStore *workspaces_store;
75
 
        GtkWidget *viewports_frame;
76
 
        GtkWidget *hsize_spin;
77
 
        GtkWidget *vsize_spin;
78
60
 
79
 
        GtkWidget *about;
80
 
        
81
61
        GtkOrientation orientation;
82
62
        int n_rows;                             /* for vertical layout this is cols */
83
63
        WnckPagerDisplayMode display_mode;
84
64
        gboolean display_all;
85
65
 
86
 
        /* gconf listeners id */
87
 
        guint listeners [3];
 
66
        GSettings *settings;
88
67
} PagerData;
89
68
 
90
69
static void display_properties_dialog (GtkAction *action,
91
70
                                       PagerData *pager);
92
 
static void display_help_dialog       (GtkAction *action,
93
 
                                       PagerData *pager);
94
 
static void display_about_dialog      (GtkAction *action,
95
 
                                       PagerData *pager);
96
71
 
97
72
static void
98
73
pager_update (PagerData *pager)
101
76
                                    pager->orientation);
102
77
        wnck_pager_set_n_rows (WNCK_PAGER (pager->pager),
103
78
                               pager->n_rows);
104
 
 
105
 
        if (pager->wm == PAGER_WM_COMPIZ)
106
 
                wnck_pager_set_show_all (WNCK_PAGER (pager->pager),
107
 
                                         FALSE);
108
 
        else
109
 
                wnck_pager_set_show_all (WNCK_PAGER (pager->pager),
110
 
                                         pager->display_all);
 
79
        wnck_pager_set_show_all (WNCK_PAGER (pager->pager),
 
80
                                 pager->display_all);
111
81
 
112
82
        if (pager->wm == PAGER_WM_METACITY)
113
83
                wnck_pager_set_display_mode (WNCK_PAGER (pager->pager),
130
100
                        gtk_widget_show (pager->workspace_names_scroll);
131
101
                if (pager->display_workspaces_toggle)
132
102
                        gtk_widget_show (pager->display_workspaces_toggle);
133
 
                if (pager->viewports_frame)
134
 
                        gtk_widget_hide (pager->viewports_frame);
135
103
                break;
136
104
        case PAGER_WM_COMPIZ:
137
 
                if (pager->switcher_frame)
138
 
                        gtk_widget_hide (pager->switcher_frame);
139
105
                if (pager->workspaces_frame)
140
 
                        gtk_widget_hide (pager->workspaces_frame);
 
106
                        gtk_widget_show (pager->workspaces_frame);
141
107
                if (pager->workspace_names_label)
142
108
                        gtk_widget_hide (pager->workspace_names_label);
143
109
                if (pager->workspace_names_scroll)
144
110
                        gtk_widget_hide (pager->workspace_names_scroll);
145
111
                if (pager->display_workspaces_toggle)
146
112
                        gtk_widget_hide (pager->display_workspaces_toggle);
147
 
                if (pager->viewports_frame)
148
 
                        gtk_widget_show (pager->viewports_frame);
149
113
                break;
150
114
        case PAGER_WM_UNKNOWN:
151
115
                if (pager->workspaces_frame)
152
116
                        gtk_widget_hide (pager->workspaces_frame);
153
 
                if (pager->viewports_frame)
154
 
                        gtk_widget_hide (pager->viewports_frame);
155
117
                break;
156
118
        default:
157
119
                g_assert_not_reached ();
229
191
        pager->orientation = new_orient;
230
192
        pager_update (pager);
231
193
        if (pager->label_row_col) 
232
 
                gtk_label_set_text (GTK_LABEL (pager->label_row_col),
233
 
                                    pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
 
194
                gtk_label_set_text (GTK_LABEL (pager->label_row_col), pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));     
234
195
}
235
196
 
236
197
static void
237
198
applet_change_background (PanelApplet               *applet,
238
 
                          PanelAppletBackgroundType  type,
239
 
                          GdkColor                  *color,
240
 
                          GdkPixmap                 *pixmap,
 
199
                          cairo_pattern_t           *pattern,
241
200
                          PagerData                 *pager)
242
201
{
243
 
        switch (type) {
244
 
        case PANEL_NO_BACKGROUND:
245
 
                wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager),
246
 
                                            GTK_SHADOW_IN);
247
 
                break;
248
 
        case PANEL_COLOR_BACKGROUND:
249
 
                wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager),
250
 
                                            GTK_SHADOW_NONE);
251
 
                break;
252
 
        case PANEL_PIXMAP_BACKGROUND:
253
 
                wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager),
254
 
                                            GTK_SHADOW_NONE);
255
 
                break;
256
 
        }
257
 
}
258
 
 
259
 
static gboolean
260
 
applet_scroll (PanelApplet    *applet,
261
 
               GdkEventScroll *event,
262
 
               PagerData      *pager)
263
 
{
264
 
        GdkScrollDirection absolute_direction;
265
 
        int                index;
266
 
        int                n_workspaces;
267
 
        int                n_columns;
268
 
        int                in_last_row;
269
 
        
270
 
        if (event->type != GDK_SCROLL)
271
 
                return FALSE;
272
 
 
273
 
        index          = wnck_workspace_get_number (wnck_screen_get_active_workspace (pager->screen));
274
 
        n_workspaces   = wnck_screen_get_workspace_count (pager->screen);
275
 
        n_columns      = n_workspaces / pager->n_rows;
276
 
        if (n_workspaces % pager->n_rows != 0)
277
 
                n_columns++;
278
 
        in_last_row    = n_workspaces % n_columns;
279
 
        
280
 
        absolute_direction = event->direction;
281
 
        if (gtk_widget_get_direction (GTK_WIDGET (applet)) == GTK_TEXT_DIR_RTL) {
282
 
                switch (event->direction) {
283
 
                case GDK_SCROLL_DOWN:
284
 
                case GDK_SCROLL_UP:
285
 
                        break;
286
 
                case GDK_SCROLL_RIGHT:
287
 
                        absolute_direction = GDK_SCROLL_LEFT;
288
 
                        break;
289
 
                case GDK_SCROLL_LEFT:
290
 
                        absolute_direction = GDK_SCROLL_RIGHT;
291
 
                        break;
292
 
                }
293
 
        }
294
 
 
295
 
        switch (absolute_direction) {
296
 
        case GDK_SCROLL_DOWN:
297
 
                if (index + n_columns < n_workspaces)
298
 
                        index += n_columns;
299
 
                else if ((index < n_workspaces - 1
300
 
                          && index + in_last_row != n_workspaces - 1) ||
301
 
                         (index == n_workspaces - 1
302
 
                          && in_last_row != 0))
303
 
                        index = (index % n_columns) + 1;
304
 
                break;
305
 
                
306
 
        case GDK_SCROLL_RIGHT:
307
 
                if (index < n_workspaces - 1)
308
 
                        index++;
309
 
                break;
310
 
                
311
 
        case GDK_SCROLL_UP:
312
 
                if (index - n_columns >= 0)
313
 
                        index -= n_columns;
314
 
                else if (index > 0)
315
 
                        index = ((pager->n_rows - 1) * n_columns) + (index % n_columns) - 1;
316
 
                        if (index >= n_workspaces)
317
 
                                index -= n_columns;
318
 
                break;
319
 
 
320
 
        case GDK_SCROLL_LEFT:
321
 
                if (index > 0)
322
 
                        index--;
323
 
                break;
324
 
        default:
325
 
                g_assert_not_reached ();
326
 
                break;
327
 
        }
328
 
 
329
 
        wnck_workspace_activate (wnck_screen_get_workspace (pager->screen,
330
 
                                                            index),
331
 
                                 event->time);
332
 
        
333
 
        return TRUE;
 
202
        wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager),
 
203
                                    pattern != NULL ? GTK_SHADOW_NONE : GTK_SHADOW_IN);
334
204
}
335
205
 
336
206
static void
337
207
destroy_pager(GtkWidget * widget, PagerData *pager)
338
208
{
339
 
        GConfClient *client = gconf_client_get_default ();
340
 
 
341
 
        gconf_client_notify_remove (client, pager->listeners[0]);
342
 
        gconf_client_notify_remove (client, pager->listeners[1]);
343
 
        gconf_client_notify_remove (client, pager->listeners[2]);
344
 
 
345
 
        g_object_unref (G_OBJECT (client));
346
 
 
347
 
        pager->listeners[0] = 0;
348
 
        pager->listeners[1] = 0;
349
 
        pager->listeners[2] = 0;
 
209
        g_object_unref (G_OBJECT (pager->settings));
350
210
 
351
211
        if (pager->properties_dialog)
352
212
                gtk_widget_destroy (pager->properties_dialog);
353
213
 
354
 
        if (pager->about)
355
 
                gtk_widget_destroy (pager->about);
356
 
 
357
214
        g_free (pager);
358
215
}
359
216
 
360
217
static const GtkActionEntry pager_menu_actions [] = {
361
218
        { "PagerPreferences", GTK_STOCK_PROPERTIES, N_("_Preferences"),
362
219
          NULL, NULL,
363
 
          G_CALLBACK (display_properties_dialog) },
364
 
        { "PagerHelp", GTK_STOCK_HELP, N_("_Help"),
365
 
          NULL, NULL,
366
 
          G_CALLBACK (display_help_dialog) },
367
 
        { "PagerAbout", GTK_STOCK_ABOUT, N_("_About"),
368
 
          NULL, NULL,
369
 
          G_CALLBACK (display_about_dialog) }
 
220
          G_CALLBACK (display_properties_dialog) }
370
221
};
371
222
 
372
223
static void
373
 
num_rows_changed (GConfClient *client,
374
 
                  guint        cnxn_id,
375
 
                  GConfEntry  *entry,
 
224
num_rows_changed (GSettings   *settings,
 
225
                  const gchar *key,
376
226
                  PagerData   *pager)
377
227
{
378
 
        int n_rows = DEFAULT_ROWS;
379
 
        
380
 
        if (entry->value != NULL &&
381
 
            entry->value->type == GCONF_VALUE_INT) {
382
 
                n_rows = gconf_value_get_int (entry->value);
383
 
        }
 
228
        int n_rows;
384
229
 
385
 
        n_rows = CLAMP (n_rows, 1, MAX_REASONABLE_ROWS);
 
230
        n_rows = g_settings_get_int (settings, key);
386
231
        
387
232
        pager->n_rows = n_rows;
388
233
        pager_update (pager);
393
238
}
394
239
 
395
240
static void
396
 
display_workspace_names_changed (GConfClient *client,
397
 
                                 guint        cnxn_id,
398
 
                                 GConfEntry  *entry,
 
241
display_workspace_names_changed (GSettings   *settings,
 
242
                                 const gchar *key,
399
243
                                 PagerData   *pager)
400
244
{
401
 
        gboolean value = FALSE; /* Default value */
402
 
        
403
 
        if (entry->value != NULL &&
404
 
            entry->value->type == GCONF_VALUE_BOOL) {
405
 
                value = gconf_value_get_bool (entry->value);
406
 
        }
 
245
        gboolean value;
 
246
       
 
247
        value = g_settings_get_boolean (settings, key);
407
248
 
408
249
        if (value) {
409
250
                pager->display_mode = WNCK_PAGER_DISPLAY_NAME;
421
262
 
422
263
 
423
264
static void
424
 
all_workspaces_changed (GConfClient *client,
425
 
                        guint        cnxn_id,
426
 
                        GConfEntry  *entry,
 
265
all_workspaces_changed (GSettings   *settings,
 
266
                        const gchar *key,
427
267
                        PagerData   *pager)
428
268
{
429
 
        gboolean value = TRUE; /* Default value */
430
 
        
431
 
        if (entry->value != NULL &&
432
 
            entry->value->type == GCONF_VALUE_BOOL) {
433
 
                value = gconf_value_get_bool (entry->value);
434
 
        }
 
269
        gboolean value;
 
270
 
 
271
        value = g_settings_get_boolean (settings, key);
435
272
 
436
273
        pager->display_all = value;
437
274
        pager_update (pager);
452
289
static void
453
290
setup_gconf (PagerData *pager)
454
291
{
455
 
        GConfClient *client;
456
 
        char *key;
457
 
 
458
 
        client = gconf_client_get_default ();
459
 
 
460
 
        key = panel_applet_gconf_get_full_key (PANEL_APPLET (pager->applet),
461
 
                                               "num_rows");
462
 
        pager->listeners[0] = gconf_client_notify_add(client, key,
463
 
                                (GConfClientNotifyFunc)num_rows_changed,
464
 
                                pager,
465
 
                                NULL, NULL);
466
 
                
467
 
        g_free (key);
468
 
 
469
 
 
470
 
        key = panel_applet_gconf_get_full_key (PANEL_APPLET (pager->applet),
471
 
                                               "display_workspace_names");
472
 
        pager->listeners[1] = gconf_client_notify_add(client, key,
473
 
                                (GConfClientNotifyFunc)display_workspace_names_changed,
474
 
                                pager,
475
 
                                NULL, NULL);
476
 
                
477
 
        g_free (key);
478
 
 
479
 
        key = panel_applet_gconf_get_full_key (PANEL_APPLET (pager->applet),
480
 
                                               "display_all_workspaces");
481
 
        pager->listeners[2] = gconf_client_notify_add(client, key,
482
 
                                (GConfClientNotifyFunc)all_workspaces_changed,
483
 
                                pager,
484
 
                                NULL, NULL);
485
 
                
486
 
        g_free (key);
487
 
 
488
 
        g_object_unref (G_OBJECT (client));
489
 
 
 
292
        pager->settings =
 
293
          panel_applet_settings_new (PANEL_APPLET (pager->applet),
 
294
                                     "org.gnome.gnome-panel.applet.workspace-switcher");
 
295
 
 
296
        g_signal_connect (pager->settings, "changed::num-rows",
 
297
                          G_CALLBACK (num_rows_changed), pager);
 
298
        g_signal_connect (pager->settings, "changed::display-workspace-names",
 
299
                          G_CALLBACK (display_workspace_names_changed), pager);
 
300
        g_signal_connect (pager->settings, "changed::display-all-workspaces",
 
301
                          G_CALLBACK (all_workspaces_changed), pager);
490
302
}
491
303
 
492
304
gboolean
494
306
{
495
307
        PagerData *pager;
496
308
        GtkActionGroup *action_group;
 
309
        GtkAction *action;
497
310
        gchar *ui_path;
498
 
        GError *error;
499
311
        gboolean display_names;
500
312
        
501
313
        panel_applet_add_preferences (applet, "/schemas/apps/workspace_switcher_applet/prefs", NULL);
508
320
 
509
321
        setup_gconf (pager);
510
322
        
511
 
        error = NULL;
512
 
        pager->n_rows = panel_applet_gconf_get_int (applet, "num_rows", &error);
513
 
        if (error) {
514
 
                g_printerr (_("Error loading num_rows value for Workspace Switcher: %s\n"),
515
 
                            error->message);
516
 
                g_error_free (error);
517
 
                /* leave current value */
518
 
        }
519
 
 
520
 
        pager->n_rows = CLAMP (pager->n_rows, 1, MAX_REASONABLE_ROWS);
521
 
 
522
 
        error = NULL;
523
 
        display_names = panel_applet_gconf_get_bool (applet, "display_workspace_names", &error);
524
 
        if (error) {
525
 
                g_printerr (_("Error loading display_workspace_names value for Workspace Switcher: %s\n"),
526
 
                            error->message);
527
 
                g_error_free (error);
528
 
                /* leave current value */
529
 
        }
 
323
        pager->n_rows = g_settings_get_int (pager->settings, "num-rows");
 
324
 
 
325
        display_names = g_settings_get_boolean (pager->settings, "display-workspace-names");
530
326
 
531
327
        if (display_names) {
532
328
                pager->display_mode = WNCK_PAGER_DISPLAY_NAME;
534
330
                pager->display_mode = WNCK_PAGER_DISPLAY_CONTENT;
535
331
        }
536
332
 
537
 
        error = NULL;
538
 
        pager->display_all = panel_applet_gconf_get_bool (applet, "display_all_workspaces", &error);
539
 
        if (error) {
540
 
                g_printerr (_("Error loading display_all_workspaces value for Workspace Switcher: %s\n"),
541
 
                            error->message);
542
 
                g_error_free (error);
543
 
                /* leave current value */
544
 
        }
 
333
        pager->display_all = g_settings_get_boolean (pager->settings, "display-all-workspaces");
545
334
        
546
335
        switch (panel_applet_get_orient (applet)) {
547
336
        case PANEL_APPLET_ORIENT_LEFT:
555
344
                break;
556
345
        }
557
346
 
558
 
        pager->pager = wnck_pager_new (NULL);
 
347
        pager->pager = wnck_pager_new ();
559
348
        pager->screen = NULL;
560
349
        pager->wm = PAGER_WM_UNKNOWN;
561
350
        wnck_pager_set_shadow_type (WNCK_PAGER (pager->pager), GTK_SHADOW_IN);
580
369
                          G_CALLBACK (applet_change_orient),
581
370
                          pager);
582
371
        g_signal_connect (G_OBJECT (pager->applet),
583
 
                          "scroll-event",
584
 
                          G_CALLBACK (applet_scroll),
585
 
                          pager);
586
 
        g_signal_connect (G_OBJECT (pager->applet),
587
372
                          "change_background",
588
373
                          G_CALLBACK (applet_change_background),
589
374
                          pager);
604
389
                                           ui_path, action_group);
605
390
        g_free (ui_path);
606
391
 
607
 
        if (panel_applet_get_locked_down (PANEL_APPLET (pager->applet))) {
608
 
                GtkAction *action;
 
392
        action = gtk_action_group_get_action (action_group, "PagerPreferences");
 
393
        g_object_bind_property (pager->applet, "locked-down",
 
394
                                action, "visible",
 
395
                                G_BINDING_DEFAULT|G_BINDING_INVERT_BOOLEAN|G_BINDING_SYNC_CREATE);
609
396
 
610
 
                action = gtk_action_group_get_action (action_group, "PagerPreferences");
611
 
                gtk_action_set_visible (action, FALSE);
612
 
        }
613
397
        g_object_unref (action_group);
614
398
 
615
399
        return TRUE;
616
400
}
617
401
 
618
 
 
619
 
static void
620
 
display_help_dialog (GtkAction *action,
621
 
                     PagerData *pager)
622
 
{
623
 
        wncklet_display_help (pager->applet, "user-guide",
624
 
                              "overview-workspaces", WORKSPACE_SWITCHER_ICON);
625
 
}
626
 
 
627
 
static void
628
 
display_about_dialog (GtkAction *action,
629
 
                      PagerData *pager)
630
 
{
631
 
        static const gchar *authors[] =
632
 
        {
633
 
                "Alexander Larsson <alla@lysator.liu.se>",
634
 
                NULL
635
 
        };
636
 
        const char *documenters [] = {
637
 
                "John Fleck <jfleck@inkstain.net>",
638
 
                "Sun GNOME Documentation Team <gdocteam@sun.com>",
639
 
                NULL
640
 
        };
641
 
        const char *translator_credits = _("translator-credits");
642
 
 
643
 
        wncklet_display_about (pager->applet, &pager->about,
644
 
                               _("Workspace Switcher"),
645
 
                               "Copyright \xc2\xa9 2001-2002 Red Hat, Inc.",
646
 
                               _("The Workspace Switcher shows you a small version of your workspaces that lets you manage your windows."),
647
 
                               authors,
648
 
                               documenters,
649
 
                               translator_credits,
650
 
                               WORKSPACE_SWITCHER_ICON,
651
 
                               "pager",
652
 
                               "Pager");
653
 
}
654
 
 
655
 
 
656
402
static void
657
403
display_workspace_names_toggled (GtkToggleButton *button,
658
404
                                 PagerData       *pager)
659
405
{
660
 
        panel_applet_gconf_set_bool (PANEL_APPLET (pager->applet),
661
 
                                     "display_workspace_names",
662
 
                                     gtk_toggle_button_get_active (button),
663
 
                                     NULL);
 
406
        g_settings_set_boolean (pager->settings,
 
407
                                "display-workspace-names",
 
408
                                gtk_toggle_button_get_active (button));
664
409
}
665
410
 
666
411
static void
667
412
all_workspaces_toggled (GtkToggleButton *button,
668
413
                        PagerData       *pager)
669
414
{
670
 
        panel_applet_gconf_set_bool (PANEL_APPLET (pager->applet),
671
 
                                     "display_all_workspaces",
672
 
                                     gtk_toggle_button_get_active (button),
673
 
                                     NULL);
 
415
        g_settings_set_boolean (pager->settings,
 
416
                                "display-all-workspaces",
 
417
                                gtk_toggle_button_get_active (button));
674
418
}
675
419
 
676
420
static void
677
421
num_rows_value_changed (GtkSpinButton *button,
678
422
                        PagerData       *pager)
679
423
{
680
 
        panel_applet_gconf_set_int (PANEL_APPLET (pager->applet),
681
 
                                    "num_rows",
682
 
                                    gtk_spin_button_get_value_as_int (button),
683
 
                                    NULL);
684
 
}
685
 
 
686
 
/* compiz' "columns" */
687
 
static void
688
 
hsize_value_changed (GtkSpinButton *button,
689
 
                     gpointer      data)
690
 
{
691
 
        GConfClient* client = gconf_client_get_default ();
692
 
 
693
 
        gconf_client_set_int (client,
694
 
                              COMPIZ_HSIZE,
695
 
                              gtk_spin_button_get_value_as_int (button),
696
 
                              NULL);
697
 
        g_object_unref (client);
698
 
}
699
 
 
700
 
/* compiz' "rows" */
701
 
static void
702
 
vsize_value_changed (GtkSpinButton *button,
703
 
                     gpointer      data)
704
 
{
705
 
        GConfClient* client = gconf_client_get_default ();
706
 
 
707
 
        gconf_client_set_int (client,
708
 
                              COMPIZ_VSIZE,
709
 
                              gtk_spin_button_get_value_as_int (button),
710
 
                              NULL);
711
 
        g_object_unref (client);
 
424
        g_settings_set_int (pager->settings,
 
425
                            "num-rows",
 
426
                            gtk_spin_button_get_value_as_int (button));
712
427
}
713
428
 
714
429
static void
781
496
num_workspaces_value_changed (GtkSpinButton *button,
782
497
                              PagerData     *pager)
783
498
{
 
499
#if 0
784
500
        /* Slow down a bit after the first change, since it's moving really to
785
501
         * fast. See bug #336731 for background.
786
502
         * FIXME: remove this if bug 410520 gets fixed. */
787
503
        button->timer_step = 0.2;
 
504
#endif
788
505
 
789
506
        wnck_screen_change_workspace_count (pager->screen,
790
507
                                            gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (pager->num_workspaces_spin)));
835
552
                             PagerData *pager)
836
553
{
837
554
        pager->properties_dialog = NULL;
838
 
        pager->switcher_frame = NULL;
839
555
        pager->workspaces_frame = NULL;
840
556
        pager->workspace_names_label = NULL;
841
557
        pager->workspace_names_scroll = NULL;
847
563
        pager->num_workspaces_spin = NULL;
848
564
        pager->workspaces_tree = NULL;
849
565
        pager->workspaces_store = NULL;
850
 
        pager->viewports_frame = NULL;
851
 
        pager->hsize_spin = NULL;
852
 
        pager->vsize_spin = NULL;
853
566
}
854
567
 
855
568
static gboolean
878
591
{
879
592
        PagerData *pager = data;
880
593
        GtkTreeViewColumn *col;
 
594
        GtkCellArea *area;
 
595
        GtkCellEditable *edit_widget;
881
596
 
882
597
        /* This is a hack. The "editable" signal for GtkCellRenderer is emitted
883
598
        only on button press or focus cycle. Hence when the user changes the
886
601
        to stop the editing. Thanks to Paolo for a better crack than the one I had.
887
602
        */
888
603
 
889
 
        col = gtk_tree_view_get_column(GTK_TREE_VIEW (pager->workspaces_tree),0);
890
 
        if (col->editable_widget != NULL && GTK_IS_CELL_EDITABLE (col->editable_widget))
891
 
            gtk_cell_editable_editing_done(col->editable_widget);
 
604
        col = gtk_tree_view_get_column (GTK_TREE_VIEW (pager->workspaces_tree), 0);
 
605
        area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col));
 
606
        edit_widget = gtk_cell_area_get_edit_widget (area);
 
607
 
 
608
        if (edit_widget)
 
609
                gtk_cell_editable_editing_done (edit_widget);
892
610
 
893
611
        gtk_widget_destroy (pager->properties_dialog);
894
612
}
903
621
                   const char *wid3,
904
622
                   const char *key)
905
623
{
906
 
        PanelApplet *applet = PANEL_APPLET (pager->applet);
907
 
        GConfClient *client = gconf_client_get_default ();
908
 
        char *fullkey;
909
624
        GtkWidget *w;
910
625
 
911
 
        if (key[0] == '/')
912
 
                fullkey = g_strdup (key);
913
 
        else
914
 
                fullkey = panel_applet_gconf_get_full_key (applet, key);
915
 
 
916
 
        if (gconf_client_key_is_writable (client, fullkey, NULL)) {
917
 
                g_object_unref (G_OBJECT (client));
918
 
                g_free (fullkey);
 
626
        if (g_settings_is_writable (pager->settings, key)) {
919
627
                return;
920
628
        }
921
 
        g_object_unref (G_OBJECT (client));
922
 
        g_free (fullkey);
923
629
 
924
630
        w = WID (wid1);
925
631
        g_assert (w != NULL);
952
658
        GtkTreeViewColumn *column;
953
659
        GtkCellRenderer *cell;
954
660
        int nr_ws, i;
955
 
        GConfClient* client = NULL;
956
 
        gint hsize;
957
 
        gint vsize;
958
 
 
959
 
        pager->switcher_frame = WID ("switcher_frame");
 
661
        
960
662
        pager->workspaces_frame = WID ("workspaces_frame");
961
663
        pager->workspace_names_label = WID ("workspace_names_label");
962
664
        pager->workspace_names_scroll = WID ("workspace_names_scroll");
963
665
 
964
 
        if (pager->wm == PAGER_WM_COMPIZ)
965
 
        {
966
 
                client = gconf_client_get_default ();
967
 
 
968
 
                pager->viewports_frame = WID ("viewports_frame");
969
 
                pager->hsize_spin = WID ("hsize_spin");
970
 
                pager->vsize_spin = WID ("vsize_spin");
971
 
 
972
 
                g_signal_connect (G_OBJECT (pager->hsize_spin),
973
 
                                  "value-changed",
974
 
                                  (GCallback) hsize_value_changed,
975
 
                                  NULL);
976
 
 
977
 
                g_signal_connect (G_OBJECT (pager->vsize_spin),
978
 
                                  "value-changed",
979
 
                                  (GCallback) vsize_value_changed,
980
 
                                  NULL);
981
 
 
982
 
                /* set value for hsize (compiz's "columns") */
983
 
                hsize = gconf_client_get_int (client, COMPIZ_HSIZE, NULL);
984
 
                gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->hsize_spin),
985
 
                                           hsize);
986
 
 
987
 
                /* set value for vsize (compiz's "rows") */
988
 
                vsize = gconf_client_get_int (client, COMPIZ_VSIZE, NULL);
989
 
                gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->vsize_spin),
990
 
                                           vsize);
991
 
 
992
 
                g_object_unref (client);
993
 
        }
994
 
        
995
666
        pager->display_workspaces_toggle = WID ("workspace_name_toggle");
996
 
        setup_sensitivity (pager,
997
 
                           builder,
 
667
        setup_sensitivity (pager, builder,
998
668
                           "workspace_name_toggle",
999
669
                           NULL,
1000
670
                           NULL,
1001
 
                           "display_workspace_names" /* key */);
 
671
                           "display-workspace-names" /* key */);
1002
672
 
1003
673
        pager->all_workspaces_radio = WID ("all_workspaces_radio");
1004
674
        pager->current_only_radio = WID ("current_only_radio");
1005
 
        setup_sensitivity (pager,
1006
 
                           builder,
 
675
        setup_sensitivity (pager, builder,
1007
676
                           "all_workspaces_radio",
1008
677
                           "current_only_radio",
1009
678
                           "label_row_col",
1010
 
                           "display_all_workspaces" /* key */);
 
679
                           "display-all-workspaces" /* key */);
1011
680
 
1012
681
        pager->num_rows_spin = WID ("num_rows_spin");
1013
682
        pager->label_row_col = WID("label_row_col");
1014
 
        setup_sensitivity (pager,
1015
 
                           builder,
 
683
        setup_sensitivity (pager, builder,
1016
684
                           "num_rows_spin",
1017
685
                           NULL,
1018
686
                           NULL,
1019
 
                           "num_rows" /* key */);
 
687
                           "num-rows" /* key */);
1020
688
 
1021
689
        pager->num_workspaces_spin = WID ("num_workspaces_spin");
1022
 
        setup_sensitivity (pager,
1023
 
                           builder,
1024
 
                           "num_workspaces_spin",
1025
 
                           NULL,
1026
 
                           NULL,
1027
 
                           NUM_WORKSPACES /* key */);
1028
 
 
1029
690
        pager->workspaces_tree = WID ("workspaces_tree_view");
1030
 
        setup_sensitivity (pager, builder,
1031
 
                           "workspaces_tree_view",
1032
 
                           NULL,
1033
 
                           NULL,
1034
 
                           WORKSPACE_NAME /* key */);
1035
691
 
1036
692
        /* Display workspace names: */
1037
 
        g_signal_connect (G_OBJECT (pager->display_workspaces_toggle),
1038
 
                          "toggled",
1039
 
                          (GCallback) display_workspace_names_toggled,
1040
 
                          pager);
 
693
        
 
694
        g_signal_connect (G_OBJECT (pager->display_workspaces_toggle), "toggled",
 
695
                          (GCallback) display_workspace_names_toggled, pager);
1041
696
 
1042
 
        if (pager->display_mode == WNCK_PAGER_DISPLAY_NAME)
 
697
        if (pager->display_mode == WNCK_PAGER_DISPLAY_NAME) {
1043
698
                value = TRUE;
1044
 
        else
 
699
        } else {
1045
700
                value = FALSE;
1046
 
 
 
701
        }
1047
702
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->display_workspaces_toggle),
1048
703
                                      value);
1049
704
 
1050
705
        /* Display all workspaces: */
1051
 
        g_signal_connect (G_OBJECT (pager->all_workspaces_radio),
1052
 
                          "toggled",
1053
 
                          (GCallback) all_workspaces_toggled,
1054
 
                          pager);
1055
 
 
1056
 
        if (pager->display_all)
1057
 
        {
1058
 
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->all_workspaces_radio),
1059
 
                                              TRUE);
1060
 
 
1061
 
                if (!g_object_get_data (G_OBJECT (pager->num_rows_spin),
1062
 
                                        NEVER_SENSITIVE))
1063
 
                        gtk_widget_set_sensitive (pager->num_rows_spin,
1064
 
                                                  TRUE);
1065
 
        }
1066
 
        else
1067
 
        {
1068
 
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->current_only_radio),
1069
 
                                              TRUE);
1070
 
                gtk_widget_set_sensitive (pager->num_rows_spin,
1071
 
                                          FALSE);
1072
 
        }
1073
 
 
 
706
        g_signal_connect (G_OBJECT (pager->all_workspaces_radio), "toggled",
 
707
                          (GCallback) all_workspaces_toggled, pager);
 
708
 
 
709
        if (pager->display_all) {
 
710
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->all_workspaces_radio), TRUE);
 
711
                if ( ! g_object_get_data (G_OBJECT (pager->num_rows_spin), NEVER_SENSITIVE))
 
712
                        gtk_widget_set_sensitive (pager->num_rows_spin, TRUE);
 
713
        } else {
 
714
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pager->current_only_radio), TRUE);
 
715
                gtk_widget_set_sensitive (pager->num_rows_spin, FALSE);
 
716
        }
 
717
                
1074
718
        /* Num rows: */
1075
 
        g_signal_connect (G_OBJECT (pager->num_rows_spin),
1076
 
                          "value_changed",
1077
 
                          (GCallback) num_rows_value_changed,
1078
 
                          pager);
1079
 
 
1080
 
        gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_rows_spin),
1081
 
                                   pager->n_rows);
1082
 
        gtk_label_set_text (GTK_LABEL (pager->label_row_col),
1083
 
                            pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
1084
 
 
1085
 
        g_signal_connect (pager->properties_dialog,
1086
 
                          "destroy",
 
719
        g_signal_connect (G_OBJECT (pager->num_rows_spin), "value_changed",
 
720
                          (GCallback) num_rows_value_changed, pager);
 
721
 
 
722
        gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_rows_spin), pager->n_rows);
 
723
        gtk_label_set_text (GTK_LABEL (pager->label_row_col), pager->orientation == GTK_ORIENTATION_HORIZONTAL ? _("rows") : _("columns"));
 
724
 
 
725
        g_signal_connect (pager->properties_dialog, "destroy",
1087
726
                          G_CALLBACK (properties_dialog_destroyed),
1088
727
                          pager);
1089
 
        g_signal_connect (pager->properties_dialog,
1090
 
                          "delete_event",
 
728
        g_signal_connect (pager->properties_dialog, "delete_event",
1091
729
                          G_CALLBACK (delete_event),
1092
730
                          pager);
1093
 
        g_signal_connect (pager->properties_dialog,
1094
 
                          "response",
 
731
        g_signal_connect (pager->properties_dialog, "response",
1095
732
                          G_CALLBACK (response_cb),
1096
733
                          pager);
1097
 
 
1098
 
        g_signal_connect (WID ("done_button"),
1099
 
                          "clicked",
1100
 
                          (GCallback) close_dialog,
1101
 
                          pager);
 
734
        
 
735
        g_signal_connect (WID ("done_button"), "clicked",
 
736
                          (GCallback) close_dialog, pager);
1102
737
 
1103
738
        gtk_spin_button_set_value (GTK_SPIN_BUTTON (pager->num_workspaces_spin),
1104
739
                                   wnck_screen_get_workspace_count (pager->screen));
1105
 
        g_signal_connect (G_OBJECT (pager->num_workspaces_spin),
1106
 
                          "value_changed",
1107
 
                          (GCallback) num_workspaces_value_changed,
1108
 
                          pager);
1109
 
 
1110
 
        wncklet_connect_while_alive (pager->screen,
1111
 
                                     "workspace_created",
1112
 
                                     G_CALLBACK (workspace_created),
1113
 
                                     pager,
1114
 
                                     pager->properties_dialog);
1115
 
 
1116
 
        wncklet_connect_while_alive (pager->screen,
1117
 
                                     "workspace_destroyed",
1118
 
                                     G_CALLBACK (workspace_destroyed),
1119
 
                                     pager,
1120
 
                                     pager->properties_dialog);
1121
 
 
1122
 
        g_signal_connect (G_OBJECT (pager->workspaces_tree),
1123
 
                          "focus_out_event",
1124
 
                          (GCallback) workspaces_tree_focused_out,
1125
 
                          pager);
1126
 
 
1127
 
        pager->workspaces_store = gtk_list_store_new (1,
1128
 
                                                      G_TYPE_STRING,
1129
 
                                                      NULL);
 
740
        g_signal_connect (G_OBJECT (pager->num_workspaces_spin), "value_changed",
 
741
                          (GCallback) num_workspaces_value_changed, pager);
 
742
        
 
743
        wncklet_connect_while_alive (pager->screen, "workspace_created",
 
744
                                     G_CALLBACK(workspace_created),
 
745
                                     pager,
 
746
                                     pager->properties_dialog);
 
747
 
 
748
        wncklet_connect_while_alive (pager->screen, "workspace_destroyed",
 
749
                                     G_CALLBACK(workspace_destroyed),
 
750
                                     pager,
 
751
                                     pager->properties_dialog);
 
752
 
 
753
        g_signal_connect (G_OBJECT (pager->workspaces_tree), "focus_out_event",
 
754
                          (GCallback) workspaces_tree_focused_out, pager);
 
755
 
 
756
        pager->workspaces_store = gtk_list_store_new (1, G_TYPE_STRING, NULL);
1130
757
        update_workspaces_model (pager);
1131
 
        gtk_tree_view_set_model (GTK_TREE_VIEW (pager->workspaces_tree),
1132
 
                                 GTK_TREE_MODEL (pager->workspaces_store));
 
758
        gtk_tree_view_set_model (GTK_TREE_VIEW (pager->workspaces_tree), GTK_TREE_MODEL (pager->workspaces_store));
1133
759
 
1134
760
        g_object_unref (pager->workspaces_store);
1135
761
 
1136
 
        cell = g_object_new (GTK_TYPE_CELL_RENDERER_TEXT,
1137
 
                             "editable",
1138
 
                             TRUE,
1139
 
                             NULL);
 
762
        cell = g_object_new (GTK_TYPE_CELL_RENDERER_TEXT, "editable", TRUE, NULL);
1140
763
        column = gtk_tree_view_column_new_with_attributes ("workspace",
1141
764
                                                           cell,
1142
 
                                                           "text",
1143
 
                                                           0,
 
765
                                                           "text", 0,
1144
766
                                                           NULL);
1145
 
        gtk_tree_view_append_column (GTK_TREE_VIEW (pager->workspaces_tree),
1146
 
                                     column);
1147
 
        g_signal_connect (cell,
1148
 
                          "edited",
1149
 
                          (GCallback) workspace_name_edited,
1150
 
                          pager);
1151
 
 
 
767
        gtk_tree_view_append_column (GTK_TREE_VIEW (pager->workspaces_tree), column);
 
768
        g_signal_connect (cell, "edited",
 
769
                          (GCallback) workspace_name_edited, pager);
 
770
        
1152
771
        nr_ws = wnck_screen_get_workspace_count (pager->screen);
1153
 
        for (i = 0; i < nr_ws; i++)
1154
 
        {
1155
 
                wncklet_connect_while_alive (G_OBJECT (wnck_screen_get_workspace (pager->screen,
1156
 
                                                                                  i)),
1157
 
                                             "name_changed",
1158
 
                                             G_CALLBACK (workspace_renamed),
1159
 
                                             pager,
1160
 
                                             pager->properties_dialog);
 
772
        for (i = 0; i < nr_ws; i++) {
 
773
                wncklet_connect_while_alive (
 
774
                                G_OBJECT (wnck_screen_get_workspace (pager->screen, i)),
 
775
                                "name_changed",
 
776
                                G_CALLBACK(workspace_renamed),
 
777
                                pager,
 
778
                                pager->properties_dialog);
1161
779
        }
1162
780
 
1163
781
        update_properties_for_wm (pager);