~ubuntu-branches/ubuntu/feisty/xfce-mcs-plugins/feisty

« back to all changes in this revision

Viewing changes to plugins/keyboard_plugin/keyboard_plugin.c

  • Committer: Bazaar Package Importer
  • Author(s): Jani Monoses
  • Date: 2006-04-11 17:40:35 UTC
  • mfrom: (1.1.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20060411174035-4y90hf4358m65r1k
Tags: 4.3.0svn+r20838-0ubuntu1
Upstream svn snapshot (merge keyboard and shortcut plugins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
56
56
#include <xfce-mcs-manager/manager-plugin.h>
57
57
#include <libxfcegui4/libxfcegui4.h>
58
58
 
 
59
#include "shortcuts_plugin.h"
59
60
#include "plugins/gtk_common/gtk_common.h"
60
61
 
61
 
#define RCDIR "mcs_settings"
62
 
#define OLDRCDIR "settings"
63
 
#define CHANNEL1 "settings"
64
 
#define RCFILE1 "gtk.xml"
65
 
#define CHANNEL2 "keyboard"
66
 
#define RCFILE2 "keyboard.xml"
67
62
#define PLUGIN_NAME "keyboard"
68
 
#define DEFAULT_THEME "Default"
 
63
#define DEFAULT_MAP "Default"
69
64
 
70
65
#define ON 1
71
66
#define OFF 0
80
75
static gboolean setting_model = FALSE;
81
76
static gboolean initial_scroll = TRUE;
82
77
static gboolean is_running = FALSE;
83
 
static gchar *current_key_theme = NULL;
 
78
static gchar *current_key_map = NULL;
84
79
static gboolean cursor_blink = TRUE;
85
80
static int cursor_blink_time = 500;
86
81
static gboolean repeat_key = TRUE;
95
90
static gboolean xkbpresent = FALSE;
96
91
#endif
97
92
 
98
 
typedef struct _Itf Itf;
99
 
struct _Itf
100
 
{
101
 
    McsPlugin *mcs_plugin;
102
 
 
103
 
    GtkWidget *checkblink;
104
 
    GtkWidget *checkrepeat;
105
 
    GtkWidget *dialog_header;
106
 
    GtkWidget *hscale1;
107
 
    GtkWidget *hscale2;
108
 
    GtkWidget *hscale3;
109
 
    GtkWidget *keyboard_dialog;
110
 
    GtkWidget *theme_swindow;
111
 
    GtkWidget *theme_treeview;
112
 
};
113
 
 
114
93
static void
115
94
set_repeat (int key, int auto_repeat_mode)
116
95
{
203
182
 
204
183
    if (new_key_theme != NULL)
205
184
    {
206
 
        if (current_key_theme && strcmp (current_key_theme, new_key_theme))
 
185
        if (current_key_map && strcmp (current_key_map, new_key_theme))
207
186
        {
208
 
            g_free (current_key_theme);
209
 
            current_key_theme = new_key_theme;
210
 
            mcs_manager_set_string (mcs_plugin->manager, "Gtk/KeyThemeName", CHANNEL1, current_key_theme);
 
187
            g_free (current_key_map);
 
188
            current_key_map = new_key_theme;
 
189
            mcs_manager_set_string (mcs_plugin->manager, "Gtk/KeyThemeName", CHANNEL1, current_key_map);
211
190
            mcs_manager_notify (mcs_plugin->manager, CHANNEL1);
212
191
            write_options (mcs_plugin);
213
192
        }
215
194
}
216
195
 
217
196
static void
218
 
read_themes (Itf * dialog)
 
197
read_themes (KeyboardMcsDialog * dialog)
219
198
{
220
199
    static GList *gtk_theme_list = NULL;
221
200
    GList *list;
222
201
    GtkTreeModel *model;
223
202
    GtkTreeView *tree_view;
224
203
    gint i = 0;
225
 
    gboolean current_key_theme_found = FALSE;
 
204
    gboolean current_key_map_found = FALSE;
226
205
    GtkTreeRowReference *row_ref = NULL;
227
206
 
228
207
    gtk_theme_list = theme_common_get_list (gtk_theme_list);
229
 
    tree_view = GTK_TREE_VIEW (dialog->theme_treeview);
 
208
    tree_view = GTK_TREE_VIEW (dialog->treeview_maps);
230
209
    model = gtk_tree_view_get_model (tree_view);
231
210
 
232
211
    setting_model = TRUE;
246
225
        gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
247
226
        gtk_list_store_set (GTK_LIST_STORE (model), &iter, THEME_NAME_COLUMN, info->name, -1);
248
227
 
249
 
        if (strcmp (current_key_theme, info->name) == 0)
 
228
        if (strcmp (current_key_map, info->name) == 0)
250
229
        {
251
230
            GtkTreePath *path = gtk_tree_model_get_path (model, &iter);
252
231
            row_ref = gtk_tree_row_reference_new (model, path);
253
232
            gtk_tree_path_free (path);
254
 
            current_key_theme_found = TRUE;
 
233
            current_key_map_found = TRUE;
255
234
        }
256
235
 
257
236
        if (i == MAX_ELEMENTS_BEFORE_SCROLLING)
265
244
        i++;
266
245
    }
267
246
 
268
 
    if (!current_key_theme_found)
 
247
    if (!current_key_map_found)
269
248
    {
270
249
        GtkTreeIter iter;
271
250
        GtkTreePath *path;
272
251
 
273
252
        gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
274
 
        gtk_list_store_set (GTK_LIST_STORE (model), &iter, THEME_NAME_COLUMN, current_key_theme, -1);
 
253
        gtk_list_store_set (GTK_LIST_STORE (model), &iter, THEME_NAME_COLUMN, current_key_map, -1);
275
254
 
276
255
        path = gtk_tree_model_get_path (model, &iter);
277
256
        row_ref = gtk_tree_row_reference_new (model, path);
311
290
    if (b_str == NULL)
312
291
        b_str = g_strdup ("");
313
292
 
314
 
    if (!strcmp (a_str, DEFAULT_THEME))
 
293
    if (!strcmp (a_str, DEFAULT_MAP))
315
294
        return -1;
316
 
    if (!strcmp (b_str, DEFAULT_THEME))
 
295
    if (!strcmp (b_str, DEFAULT_MAP))
317
296
        return 1;
318
297
 
319
298
    return g_utf8_collate (a_str, b_str);
320
299
}
321
300
 
322
301
static void
323
 
cb_dialog_response (GtkWidget * dialog, gint response_id)
 
302
cb_dialog_response (GtkWidget* widget, gint response_id, KeyboardMcsDialog* dialog)
324
303
{
 
304
    write_options (dialog->mcs_plugin);
 
305
    if (dialog->theme_modified)
 
306
    {
 
307
        shortcuts_plugin_save_theme (dialog);
 
308
    }
 
309
 
325
310
    if (response_id == GTK_RESPONSE_HELP)
326
311
    {
327
312
        g_message ("HELP: TBD");
329
314
    else
330
315
    {
331
316
        is_running = FALSE;
332
 
        gtk_widget_destroy (dialog);
 
317
        gtk_widget_destroy (widget);
333
318
    }
 
319
 
334
320
}
335
321
 
336
322
static void
337
 
cb_checkrepeat_changed (GtkWidget * dialog, gpointer user_data)
 
323
cb_checkbutton_repeat_changed (GtkWidget * widget, gpointer user_data)
338
324
{
339
 
    Itf *itf = (Itf *) user_data;
340
 
    McsPlugin *mcs_plugin = itf->mcs_plugin;
 
325
    KeyboardMcsDialog *dialog = (KeyboardMcsDialog *) user_data;
 
326
    McsPlugin *mcs_plugin = dialog->mcs_plugin;
341
327
 
342
 
    repeat_key = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (itf->checkrepeat));
343
 
    gtk_widget_set_sensitive (itf->hscale1, repeat_key);
344
 
    gtk_widget_set_sensitive (itf->hscale2, repeat_key);
 
328
    repeat_key = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_repeat));
 
329
    gtk_widget_set_sensitive (dialog->scale_repeat_rate, repeat_key);
 
330
    gtk_widget_set_sensitive (dialog->scale_repeat_delay, repeat_key);
345
331
    set_repeat (ALL, repeat_key ? ON : OFF);
346
332
 
347
333
    mcs_manager_set_int (mcs_plugin->manager, "Key/RepeatKey", CHANNEL2, repeat_key ? 1 : 0);
350
336
}
351
337
 
352
338
static void
353
 
cb_repeatdelay_changed (GtkWidget * dialog, gpointer user_data)
 
339
cb_repeatdelay_changed (GtkWidget * widget, gpointer user_data)
354
340
{
355
 
    Itf *itf = (Itf *) user_data;
356
 
    McsPlugin *mcs_plugin = itf->mcs_plugin;
 
341
    KeyboardMcsDialog *dialog = (KeyboardMcsDialog *) user_data;
 
342
    McsPlugin *mcs_plugin = dialog->mcs_plugin;
357
343
 
358
 
    repeat_rate = (int) gtk_range_get_value (GTK_RANGE (itf->hscale1));
359
 
    repeat_delay = (int) gtk_range_get_value (GTK_RANGE (itf->hscale2));
 
344
    repeat_rate = (int) gtk_range_get_value (GTK_RANGE (dialog->scale_repeat_rate));
 
345
    repeat_delay = (int) gtk_range_get_value (GTK_RANGE (dialog->scale_repeat_delay));
360
346
 
361
347
    mcs_manager_set_int (mcs_plugin->manager, "Key/RepeatDelay", CHANNEL2, repeat_delay);
362
348
    mcs_manager_set_int (mcs_plugin->manager, "Key/RepeatRate", CHANNEL2, repeat_rate);
374
360
}
375
361
 
376
362
static void
377
 
cb_checkblink_changed (GtkWidget * dialog, gpointer user_data)
 
363
cb_checkbutton_blink_changed (GtkWidget * widget, gpointer user_data)
378
364
{
379
 
    Itf *itf = (Itf *) user_data;
380
 
    McsPlugin *mcs_plugin = itf->mcs_plugin;
 
365
    KeyboardMcsDialog *dialog = (KeyboardMcsDialog *) user_data;
 
366
    McsPlugin *mcs_plugin = dialog->mcs_plugin;
381
367
 
382
 
    cursor_blink = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (itf->checkblink));
383
 
    gtk_widget_set_sensitive (itf->hscale3, cursor_blink);
 
368
    cursor_blink = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_blink));
 
369
    gtk_widget_set_sensitive (dialog->scale_blink_time, cursor_blink);
384
370
 
385
371
    mcs_manager_set_int (mcs_plugin->manager, "Net/CursorBlink", CHANNEL1, cursor_blink ? 1 : 0);
386
372
    mcs_manager_notify (mcs_plugin->manager, CHANNEL1);
388
374
}
389
375
 
390
376
static void
391
 
cb_blinktime_changed (GtkWidget * dialog, gpointer user_data)
 
377
cb_blinktime_changed (GtkWidget * widget, gpointer user_data)
392
378
{
393
 
    Itf *itf = (Itf *) user_data;
394
 
    McsPlugin *mcs_plugin = itf->mcs_plugin;
 
379
    KeyboardMcsDialog *dialog = (KeyboardMcsDialog *) user_data;
 
380
    McsPlugin *mcs_plugin = dialog->mcs_plugin;
395
381
 
396
 
    cursor_blink_time = 2600 - (int) gtk_range_get_value (GTK_RANGE (itf->hscale3));
 
382
    cursor_blink_time = 2600 - (int) gtk_range_get_value (GTK_RANGE (dialog->scale_blink_time));
397
383
    mcs_manager_set_int (mcs_plugin->manager, "Net/CursorBlinkTime", CHANNEL1, cursor_blink_time);
398
384
    mcs_manager_notify (mcs_plugin->manager, CHANNEL1);
399
385
    write_options (mcs_plugin);
400
386
}
401
387
 
402
 
Itf *
403
 
create_keyboard_dialog (McsPlugin * mcs_plugin)
 
388
KeyboardMcsDialog *
 
389
keyboard_plugin_create_dialog (McsPlugin * mcs_plugin)
404
390
{
405
 
    Itf *dialog;
 
391
    KeyboardMcsDialog *dialog;
406
392
 
 
393
    GtkWidget *notebook;
407
394
    GtkWidget *button;
408
 
    GtkWidget *checkblink;
409
 
    GtkWidget *checkrepeat;
 
395
    GtkWidget *checkbutton_blink;
 
396
    GtkWidget *checkbutton_repeat;
410
397
    GtkWidget *dialog_header;
411
398
    GtkWidget *dialog_vbox;
412
399
    GtkWidget *frame;
413
400
    GtkWidget *main_hbox;
414
401
    GtkWidget *hbox;
415
 
    GtkWidget *hscale1;
416
 
    GtkWidget *hscale2;
417
 
    GtkWidget *hscale3;
418
 
    GtkWidget *keyboard_dialog;
 
402
    GtkWidget *scale_repeat_rate;
 
403
    GtkWidget *scale_repeat_delay;
 
404
    GtkWidget *scale_blink_time;
 
405
    GtkWidget *dialog_keyboard;
419
406
    GtkWidget *label;
420
407
    GtkWidget *table;
421
408
    GtkWidget *theme_swindow;
422
 
    GtkWidget *theme_treeview;
 
409
    GtkWidget *treeview_maps;
423
410
    GtkWidget *left_vbox;
424
411
    GtkWidget *vbox;
425
412
    GtkWidget *entry;
 
413
    GtkWidget *shortcuts_widget;
 
414
    guint nth = 0;
426
415
    
427
 
    dialog = g_new (Itf, 1);
 
416
    dialog = g_new (KeyboardMcsDialog, 1);
428
417
 
429
418
    dialog->mcs_plugin = mcs_plugin;
430
419
 
431
 
    dialog->keyboard_dialog = gtk_dialog_new ();
432
 
 
433
 
    gtk_window_set_icon (GTK_WINDOW (dialog->keyboard_dialog), mcs_plugin->icon);
434
 
 
435
 
    gtk_window_set_title (GTK_WINDOW (dialog->keyboard_dialog), _("Keyboard Preferences"));
436
 
    gtk_window_set_default_size (GTK_WINDOW (dialog->keyboard_dialog), 440, 200);
437
 
    gtk_dialog_set_has_separator (GTK_DIALOG (dialog->keyboard_dialog), FALSE);
438
 
 
439
 
    dialog_vbox = GTK_DIALOG (dialog->keyboard_dialog)->vbox;
 
420
    dialog->dialog_keyboard = gtk_dialog_new ();
 
421
 
 
422
    gtk_window_set_icon (GTK_WINDOW (dialog->dialog_keyboard), mcs_plugin->icon);
 
423
    gtk_window_set_title (GTK_WINDOW (dialog->dialog_keyboard), _("Keyboard Preferences"));
 
424
    gtk_window_set_default_size (GTK_WINDOW (dialog->dialog_keyboard), 440, 200);
 
425
    gtk_dialog_set_has_separator (GTK_DIALOG (dialog->dialog_keyboard), FALSE);
 
426
 
 
427
    dialog_vbox = gtk_vbox_new (FALSE, 7);
 
428
    gtk_widget_show (GTK_WIDGET(dialog_vbox));
 
429
    
 
430
    gtk_box_pack_start(GTK_BOX (GTK_DIALOG(dialog->dialog_keyboard)->vbox), GTK_WIDGET(dialog_vbox), TRUE, TRUE, 0);
 
431
    
440
432
    gtk_widget_show (dialog_vbox);
441
433
 
442
434
    dialog->dialog_header = xfce_create_header (mcs_plugin->icon, _("Keyboard Preferences"));
443
435
    gtk_widget_show (dialog->dialog_header);
444
436
    gtk_box_pack_start (GTK_BOX (dialog_vbox), dialog->dialog_header, FALSE, TRUE, 0);
445
437
 
 
438
    notebook = gtk_notebook_new ();
 
439
    gtk_widget_show (GTK_WIDGET(notebook));
 
440
    gtk_box_pack_start (GTK_BOX (dialog_vbox), GTK_WIDGET(notebook), TRUE, TRUE, 0);
 
441
 
446
442
    main_hbox = gtk_hbox_new (FALSE, 5);
447
443
    gtk_widget_show (main_hbox);
448
 
    gtk_box_pack_start (GTK_BOX (dialog_vbox), main_hbox, TRUE, TRUE, 0);
 
444
    gtk_container_add (GTK_CONTAINER (notebook), main_hbox);
449
445
    gtk_container_set_border_width (GTK_CONTAINER (main_hbox), 5);
450
446
 
451
447
    frame = xfce_framebox_new (_("Keyboard map"), FALSE);
465
461
    gtk_box_pack_start (GTK_BOX (hbox), dialog->theme_swindow, TRUE, TRUE, 0);
466
462
    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (dialog->theme_swindow), GTK_SHADOW_IN);
467
463
 
468
 
    dialog->theme_treeview = gtk_tree_view_new ();
469
 
    gtk_widget_show (dialog->theme_treeview);
470
 
    gtk_container_add (GTK_CONTAINER (dialog->theme_swindow), dialog->theme_treeview);
471
 
    gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog->theme_treeview), FALSE);
 
464
    dialog->treeview_maps = gtk_tree_view_new ();
 
465
    gtk_widget_show (dialog->treeview_maps);
 
466
    gtk_container_add (GTK_CONTAINER (dialog->theme_swindow), dialog->treeview_maps);
 
467
    gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog->treeview_maps), FALSE);
472
468
 
473
469
    left_vbox = gtk_vbox_new (FALSE, 0);
474
470
    gtk_widget_show (left_vbox);
482
478
    gtk_widget_show (vbox);
483
479
    xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox);
484
480
 
485
 
    dialog->checkrepeat = gtk_check_button_new_with_mnemonic (_("Repeat"));
486
 
    gtk_widget_show (dialog->checkrepeat);
487
 
    gtk_box_pack_start (GTK_BOX (vbox), dialog->checkrepeat, FALSE, FALSE, 0);
488
 
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkrepeat), repeat_key);
 
481
    dialog->checkbutton_repeat = gtk_check_button_new_with_mnemonic (_("Repeat"));
 
482
    gtk_widget_show (dialog->checkbutton_repeat);
 
483
    gtk_box_pack_start (GTK_BOX (vbox), dialog->checkbutton_repeat, FALSE, FALSE, 0);
 
484
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_repeat), repeat_key);
489
485
 
490
486
    table = gtk_table_new (4, 3, FALSE);
491
487
    gtk_widget_show (table);
533
529
    gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
534
530
    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
535
531
 
536
 
    dialog->hscale1 = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (repeat_rate, 10, 500, 10, 10, 0)));
537
 
    gtk_widget_show (dialog->hscale1);
538
 
    gtk_table_attach (GTK_TABLE (table), dialog->hscale1, 1, 2, 3, 4, 
 
532
    dialog->scale_repeat_rate = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (repeat_rate, 10, 500, 10, 10, 0)));
 
533
    gtk_widget_show (dialog->scale_repeat_rate);
 
534
    gtk_table_attach (GTK_TABLE (table), dialog->scale_repeat_rate, 1, 2, 3, 4, 
539
535
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 2);
540
 
    gtk_scale_set_draw_value (GTK_SCALE (dialog->hscale1), FALSE);
541
 
    gtk_range_set_update_policy (GTK_RANGE (dialog->hscale1), GTK_UPDATE_DISCONTINUOUS);
542
 
    gtk_widget_set_sensitive (dialog->hscale1, repeat_key);
 
536
    gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_repeat_rate), FALSE);
 
537
    gtk_range_set_update_policy (GTK_RANGE (dialog->scale_repeat_rate), GTK_UPDATE_DISCONTINUOUS);
 
538
    gtk_widget_set_sensitive (dialog->scale_repeat_rate, repeat_key);
543
539
 
544
 
    dialog->hscale2 = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (repeat_delay, 100, 2000, 10, 100, 0)));
545
 
    gtk_widget_show (dialog->hscale2);
546
 
    gtk_table_attach (GTK_TABLE (table), dialog->hscale2, 1, 2, 1, 2, 
 
540
    dialog->scale_repeat_delay = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (repeat_delay, 100, 2000, 10, 100, 0)));
 
541
    gtk_widget_show (dialog->scale_repeat_delay);
 
542
    gtk_table_attach (GTK_TABLE (table), dialog->scale_repeat_delay, 1, 2, 1, 2, 
547
543
                      (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 2);
548
 
    gtk_scale_set_draw_value (GTK_SCALE (dialog->hscale2), FALSE);
549
 
    gtk_range_set_update_policy (GTK_RANGE (dialog->hscale2), GTK_UPDATE_DISCONTINUOUS);
550
 
    gtk_widget_set_sensitive (dialog->hscale2, repeat_key);
 
544
    gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_repeat_delay), FALSE);
 
545
    gtk_range_set_update_policy (GTK_RANGE (dialog->scale_repeat_delay), GTK_UPDATE_DISCONTINUOUS);
 
546
    gtk_widget_set_sensitive (dialog->scale_repeat_delay, repeat_key);
551
547
 
552
548
    frame = xfce_framebox_new (_("Cursor"), TRUE);
553
549
    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
558
554
    gtk_widget_show (vbox);
559
555
    xfce_framebox_add (XFCE_FRAMEBOX (frame), vbox);
560
556
 
561
 
    dialog->checkblink = gtk_check_button_new_with_mnemonic (_("Show blinking"));
562
 
    gtk_widget_show (dialog->checkblink);
563
 
    gtk_box_pack_start (GTK_BOX (vbox), dialog->checkblink, FALSE, FALSE, 0);
564
 
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkblink), cursor_blink);
 
557
    dialog->checkbutton_blink = gtk_check_button_new_with_mnemonic (_("Show blinking"));
 
558
    gtk_widget_show (dialog->checkbutton_blink);
 
559
    gtk_box_pack_start (GTK_BOX (vbox), dialog->checkbutton_blink, FALSE, FALSE, 0);
 
560
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_blink), cursor_blink);
565
561
 
566
562
    table = gtk_table_new (2, 3, FALSE);
567
563
    gtk_widget_show (table);
588
584
    gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
589
585
    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
590
586
 
591
 
    dialog->hscale3 = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (CLAMP (2600 - cursor_blink_time, 100, 2500), 
 
587
    dialog->scale_blink_time = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (CLAMP (2600 - cursor_blink_time, 100, 2500), 
592
588
                                      100, 2500, 200, 0, 0)));
593
 
    gtk_widget_show (dialog->hscale3);
594
 
    gtk_table_attach (GTK_TABLE (table), dialog->hscale3, 1, 2, 1, 2, 
 
589
    gtk_widget_show (dialog->scale_blink_time);
 
590
    gtk_table_attach (GTK_TABLE (table), dialog->scale_blink_time, 1, 2, 1, 2, 
595
591
                                 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 2);
596
 
    gtk_scale_set_draw_value (GTK_SCALE (dialog->hscale3), FALSE);
597
 
    gtk_range_set_update_policy (GTK_RANGE (dialog->hscale3), GTK_UPDATE_DISCONTINUOUS);
598
 
    gtk_widget_set_sensitive (dialog->hscale3, cursor_blink);
 
592
    gtk_scale_set_draw_value (GTK_SCALE (dialog->scale_blink_time), FALSE);
 
593
    gtk_range_set_update_policy (GTK_RANGE (dialog->scale_blink_time), GTK_UPDATE_DISCONTINUOUS);
 
594
    gtk_widget_set_sensitive (dialog->scale_blink_time, cursor_blink);
599
595
 
600
596
    frame = xfce_framebox_new (_("Test area"), TRUE);
601
597
    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
604
600
 
605
601
    entry = gtk_entry_new();
606
602
    gtk_widget_show (entry);
607
 
    gtk_entry_set_text(entry, _("Use this entry area to test the settings above."));
 
603
    gtk_entry_set_text(GTK_ENTRY(entry), _("Use this entry area to test the settings above."));
608
604
    xfce_framebox_add (XFCE_FRAMEBOX (frame), entry);
609
605
 
610
 
    hbox = GTK_DIALOG (dialog->keyboard_dialog)->action_area;
 
606
    hbox = GTK_DIALOG (dialog->dialog_keyboard)->action_area;
611
607
    gtk_widget_show (hbox);
612
608
    gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END);
613
609
 
 
610
    label = gtk_label_new (_("Settings"));
 
611
    gtk_widget_show (label);
 
612
    gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook),
 
613
        gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), nth++), label);
 
614
    gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
 
615
 
 
616
    shortcuts_widget = shortcuts_plugin_create_dialog (dialog);
 
617
    gtk_container_add (GTK_CONTAINER (notebook), shortcuts_widget);
 
618
    label = gtk_label_new (_("Shortcuts"));
 
619
    gtk_widget_show (label);
 
620
    gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook),
 
621
        gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), nth++), label);
 
622
    gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
 
623
 
614
624
    button = gtk_button_new_from_stock ("gtk-help");
615
625
    /* gtk_widget_show (button); */
616
 
    gtk_dialog_add_action_widget (GTK_DIALOG (dialog->keyboard_dialog), button, GTK_RESPONSE_HELP);
 
626
    gtk_dialog_add_action_widget (GTK_DIALOG (dialog->dialog_keyboard), button, GTK_RESPONSE_HELP);
617
627
    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
618
628
 
619
629
    button = gtk_button_new_from_stock ("gtk-close");
620
630
    gtk_widget_show (button);
621
 
    gtk_dialog_add_action_widget (GTK_DIALOG (dialog->keyboard_dialog), button, GTK_RESPONSE_CLOSE);
 
631
    gtk_dialog_add_action_widget (GTK_DIALOG (dialog->dialog_keyboard), button, GTK_RESPONSE_CLOSE);
622
632
    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
623
633
 
624
634
    gtk_widget_grab_focus (button);
628
638
}
629
639
 
630
640
static void
631
 
setup_dialog (Itf * itf)
 
641
keyboard_plugin_setup_dialog (KeyboardMcsDialog * dialog)
632
642
{
633
643
    GtkTreeModel *model;
634
644
    GtkTreeSelection *selection;
635
645
 
636
 
    gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (itf->theme_treeview), 
 
646
    gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->treeview_maps), 
637
647
                                                 -1, 
638
648
                                                 NULL, 
639
649
                                                 gtk_cell_renderer_text_new (), 
640
650
                                                 "text", 
641
651
                                                 THEME_NAME_COLUMN, 
642
652
                                                 NULL);
 
653
                                                 
643
654
    model = (GtkTreeModel *) gtk_list_store_new (N_COLUMNS, G_TYPE_STRING);
644
655
    gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (model), 0, sort_func, NULL, NULL);
645
656
    gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), 0, GTK_SORT_ASCENDING);
646
 
    gtk_tree_view_set_model (GTK_TREE_VIEW (itf->theme_treeview), model);
647
 
    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (itf->theme_treeview));
 
657
    gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview_maps), model);
 
658
    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview_maps));
648
659
    gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
649
 
    g_signal_connect (G_OBJECT (selection), "changed", (GCallback) theme_selection_changed, itf->mcs_plugin);
650
 
 
651
 
    read_themes (itf);
652
 
 
653
 
    g_signal_connect (G_OBJECT (itf->keyboard_dialog), "response", G_CALLBACK (cb_dialog_response), itf->mcs_plugin);
654
 
    g_signal_connect (G_OBJECT (itf->checkrepeat), "toggled", G_CALLBACK (cb_checkrepeat_changed), itf);
655
 
    g_signal_connect (G_OBJECT (itf->hscale1), "value_changed", (GCallback) cb_repeatdelay_changed, itf);
656
 
    g_signal_connect (G_OBJECT (itf->hscale2), "value_changed", (GCallback) cb_repeatdelay_changed, itf);
657
 
    g_signal_connect (G_OBJECT (itf->checkblink), "toggled", G_CALLBACK (cb_checkblink_changed), itf);
658
 
    g_signal_connect (G_OBJECT (itf->hscale3), "value_changed", (GCallback) cb_blinktime_changed, itf);
659
 
 
660
 
    xfce_gtk_window_center_on_monitor_with_pointer (GTK_WINDOW (itf->keyboard_dialog));
661
 
    gdk_x11_window_set_user_time(GTK_WIDGET (itf->keyboard_dialog)->window, 
662
 
            gdk_x11_get_server_time (GTK_WIDGET (itf->keyboard_dialog)->window));
663
 
    gtk_widget_show (itf->keyboard_dialog);
 
660
    g_signal_connect (G_OBJECT (selection), "changed", (GCallback) theme_selection_changed, dialog->mcs_plugin);
 
661
 
 
662
    read_themes (dialog);
 
663
 
 
664
    g_signal_connect (G_OBJECT (dialog->dialog_keyboard), "response", G_CALLBACK (cb_dialog_response), dialog);
 
665
    g_signal_connect (G_OBJECT (dialog->checkbutton_repeat), "toggled", G_CALLBACK (cb_checkbutton_repeat_changed), dialog);
 
666
    g_signal_connect (G_OBJECT (dialog->scale_repeat_rate), "value_changed", (GCallback) cb_repeatdelay_changed, dialog);
 
667
    g_signal_connect (G_OBJECT (dialog->scale_repeat_delay), "value_changed", (GCallback) cb_repeatdelay_changed, dialog);
 
668
    g_signal_connect (G_OBJECT (dialog->checkbutton_blink), "toggled", G_CALLBACK (cb_checkbutton_blink_changed), dialog);
 
669
    g_signal_connect (G_OBJECT (dialog->scale_blink_time), "value_changed", (GCallback) cb_blinktime_changed, dialog);
 
670
}
 
671
 
 
672
static void
 
673
setup_dialog (KeyboardMcsDialog * dialog)
 
674
{
 
675
    GtkTreeModel *model;
 
676
    GtkTreeSelection *selection;
 
677
 
 
678
    keyboard_plugin_setup_dialog (dialog);
 
679
    shortcuts_plugin_setup_dialog (dialog);
 
680
 
 
681
    xfce_gtk_window_center_on_monitor_with_pointer (GTK_WINDOW (dialog->dialog_keyboard));
 
682
    gdk_x11_window_set_user_time(GTK_WIDGET (dialog->dialog_keyboard)->window, 
 
683
            gdk_x11_get_server_time (GTK_WIDGET (dialog->dialog_keyboard)->window));
 
684
            
 
685
    gtk_widget_show (dialog->dialog_keyboard);
664
686
}
665
687
 
666
688
McsPluginInitResult
667
689
mcs_plugin_init (McsPlugin * mcs_plugin)
668
690
{
 
691
    gchar *file, *path;
 
692
    McsSetting *setting;
 
693
 
669
694
    /* This is required for UTF-8 at least - Please don't remove it */
670
695
    xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
671
696
 
675
700
    mcs_plugin->run_dialog = run_dialog;
676
701
    mcs_plugin->icon = xfce_themed_icon_load ("xfce4-keyboard", 48);
677
702
    mcs_manager_notify (mcs_plugin->manager, CHANNEL1);
 
703
    
 
704
    shortcuts_plugin_init (mcs_plugin);
678
705
 
679
706
    return MCS_PLUGIN_INIT_OK;
680
707
}
697
724
 
698
725
    if (!rcfile)
699
726
    {
700
 
        rcfile = xfce_get_userfile (OLDRCDIR, RCFILE1, NULL);
 
727
        rcfile = xfce_get_userfile (OLD_RCDIR, RCFILE1, NULL);
701
728
    }
702
729
 
703
730
    if (g_file_test (rcfile, G_FILE_TEST_EXISTS))
717
744
 
718
745
    if (!rcfile)
719
746
    {
720
 
        rcfile = xfce_get_userfile (OLDRCDIR, RCFILE2, NULL);
 
747
        rcfile = xfce_get_userfile (OLD_RCDIR, RCFILE2, NULL);
721
748
    }
722
749
 
723
750
    if (g_file_test (rcfile, G_FILE_TEST_EXISTS))
736
763
    setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Gtk/KeyThemeName", CHANNEL1);
737
764
    if (setting)
738
765
    {
739
 
        if (current_key_theme)
740
 
            g_free (current_key_theme);
 
766
        if (current_key_map)
 
767
            g_free (current_key_map);
741
768
 
742
 
        current_key_theme = g_strdup (setting->data.v_string);
 
769
        current_key_map = g_strdup (setting->data.v_string);
743
770
    }
744
771
    else
745
772
    {
746
 
        if (current_key_theme)
747
 
            g_free (current_key_theme);
748
 
 
749
 
        current_key_theme = g_strdup (DEFAULT_THEME);
750
 
 
751
 
        mcs_manager_set_string (mcs_plugin->manager, "Gtk/KeyThemeName", CHANNEL1, current_key_theme);
 
773
        if (current_key_map)
 
774
            g_free (current_key_map);
 
775
 
 
776
        current_key_map = g_strdup (DEFAULT_MAP);
 
777
 
 
778
        mcs_manager_set_string (mcs_plugin->manager, "Gtk/KeyThemeName", CHANNEL1, current_key_map);
752
779
    }
753
780
 
754
781
    setting = mcs_manager_setting_lookup (mcs_plugin->manager, "Net/CursorBlink", CHANNEL1);
882
909
    }
883
910
    g_free (path);
884
911
 
 
912
    shortcuts_plugin_save_settings (mcs_plugin);
 
913
 
885
914
    return (result);
886
915
}
887
916
 
888
917
static void
889
918
run_dialog (McsPlugin * mcs_plugin)
890
919
{
891
 
    static Itf *dialog = NULL;
 
920
    static KeyboardMcsDialog *dialog = NULL;
892
921
 
893
922
    xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
894
923
 
895
924
    if (is_running)
896
925
    {
897
 
        if((dialog) && (dialog->keyboard_dialog))
 
926
        if((dialog) && (dialog->dialog_keyboard))
898
927
        {
899
 
            gtk_window_present(GTK_WINDOW(dialog->keyboard_dialog));
900
 
            gtk_window_set_focus (GTK_WINDOW(dialog->keyboard_dialog), NULL);
 
928
            gtk_window_present(GTK_WINDOW(dialog->dialog_keyboard));
 
929
            gtk_window_set_focus (GTK_WINDOW(dialog->dialog_keyboard), NULL);
901
930
        }
902
931
        return;
903
932
    }
904
933
 
905
934
    is_running = TRUE;
906
 
    dialog = create_keyboard_dialog (mcs_plugin);
 
935
    dialog = keyboard_plugin_create_dialog (mcs_plugin);
907
936
    setup_dialog (dialog);
 
937
    shortcuts_plugin_load_theme (dialog);
908
938
}
909
939
 
910
940
/* macro defined in manager-plugin.h */