~ubuntu-branches/ubuntu/utopic/geany-plugin-spellcheck/utopic

« back to all changes in this revision

Viewing changes to src/gui.c

  • Committer: Bazaar Package Importer
  • Author(s): Bhavani Shankar
  • Date: 2009-06-12 11:34:42 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20090612113442-8fbwsszzk4y80mxa
Tags: 0.4-0ubuntu1
* New Upstream release. LP: #386220
* Refresh debian/patches/99_ltmain_as-needed.patch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
20
 *      MA 02110-1301, USA.
21
21
 *
22
 
 * $Id: gui.c 512 2009-02-27 20:30:12Z eht16 $
 
22
 * $Id: gui.c 646 2009-05-14 19:55:43Z eht16 $
23
23
 */
24
24
 
25
25
 
56
56
 
57
57
/* Flag to indicate that a callback function will be triggered by generating the appropriate event
58
58
 * but the callback should be ignored. */
59
 
static gboolean ignore_sc_callback = FALSE;
 
59
static gboolean sc_ignore_callback = FALSE;
60
60
 
61
61
 
62
62
 
71
71
 
72
72
static void toolbar_item_toggled_cb(GtkToggleToolButton *button, gpointer user_data)
73
73
{
74
 
        if (ignore_sc_callback)
 
74
        if (sc_ignore_callback)
75
75
                return;
76
76
 
77
77
        sc_info->check_while_typing = gtk_toggle_tool_button_get_active(button);
81
81
}
82
82
 
83
83
 
84
 
void sc_gui_toolbar_update(void)
 
84
void sc_gui_update_tooltip(void)
 
85
{
 
86
}
 
87
 
 
88
 
 
89
void sc_gui_update_toolbar(void)
85
90
{
86
91
        /* toolbar item is not requested, so remove the item if it exists */
87
92
        if (! sc_info->show_toolbar_item)
96
101
                if (sc_info->toolbar_button == NULL)
97
102
                {
98
103
                        sc_info->toolbar_button = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_SPELL_CHECK);
99
 
#if GTK_CHECK_VERSION(2, 12, 0)
100
 
                        gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(sc_info->toolbar_button),
101
 
                                _("Toggle spell check while typing"));
102
 
#endif
 
104
                        sc_gui_update_tooltip();
 
105
 
103
106
                        plugin_add_toolbar_item(geany_plugin, sc_info->toolbar_button);
104
107
                        ui_add_document_sensitive(GTK_WIDGET(sc_info->toolbar_button));
105
108
 
108
111
                }
109
112
                gtk_widget_show(GTK_WIDGET(sc_info->toolbar_button));
110
113
 
111
 
                ignore_sc_callback = TRUE;
 
114
                sc_ignore_callback = TRUE;
112
115
                gtk_toggle_tool_button_set_active(
113
116
                        GTK_TOGGLE_TOOL_BUTTON(sc_info->toolbar_button), sc_info->check_while_typing);
114
 
                ignore_sc_callback = FALSE;
 
117
                sc_ignore_callback = FALSE;
115
118
        }
116
119
}
117
120
 
398
401
}
399
402
 
400
403
 
401
 
static void menu_item_activate_cb(GtkMenuItem *menuitem, gpointer gdata)
 
404
static void update_labels(void)
 
405
{
 
406
        gchar *label;
 
407
 
 
408
        label = g_strdup_printf(_("Default (%s)"),
 
409
                (sc_info->default_language != NULL) ? sc_info->default_language : _("unknown"));
 
410
 
 
411
        gtk_menu_item_set_label(GTK_MENU_ITEM(sc_info->submenu_item_default), label);
 
412
 
 
413
        g_free(label);
 
414
 
 
415
#if GTK_CHECK_VERSION(2, 12, 0)
 
416
        if (sc_info->toolbar_button != NULL)
 
417
        {
 
418
                gchar *text = g_strdup_printf(
 
419
                        _("Toggle spell check while typing (current language: %s)"),
 
420
                        (sc_info->default_language != NULL) ? sc_info->default_language : _("unknown"));
 
421
                gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(sc_info->toolbar_button), text);
 
422
                g_free(text);
 
423
        }
 
424
#endif
 
425
}
 
426
 
 
427
 
 
428
static void menu_item_toggled_cb(GtkCheckMenuItem *menuitem, gpointer gdata)
402
429
{
403
430
        GeanyDocument *doc;
404
431
 
 
432
        if (sc_ignore_callback)
 
433
                return;
 
434
 
 
435
        if (menuitem != NULL &&
 
436
                GTK_IS_CHECK_MENU_ITEM(menuitem) &&
 
437
                ! gtk_check_menu_item_get_active(menuitem))
 
438
        {
 
439
                return;
 
440
        }
405
441
        doc = document_get_current();
406
442
 
407
443
        /* Another language was chosen from the menu item, so make it default for this session. */
408
444
    if (gdata != NULL)
 
445
        {
409
446
                setptr(sc_info->default_language, g_strdup(gdata));
410
 
 
411
 
        sc_speller_reinit_enchant_dict();
 
447
                sc_speller_reinit_enchant_dict();
 
448
                update_labels();
 
449
        }
412
450
 
413
451
        editor_indicator_clear(doc->editor, GEANY_INDICATOR_ERROR);
414
452
        if (sc_info->use_msgwin)
423
461
 
424
462
void sc_gui_kb_run_activate_cb(guint key_id)
425
463
{
426
 
        menu_item_activate_cb(NULL, NULL);
 
464
        menu_item_toggled_cb(NULL, NULL);
427
465
}
428
466
 
429
467
 
433
471
 
434
472
        print_typing_changed_message();
435
473
 
436
 
        sc_gui_toolbar_update();
 
474
        sc_gui_update_toolbar();
437
475
}
438
476
 
439
477
 
451
489
}
452
490
 
453
491
 
454
 
GtkWidget *sc_gui_create_menu(GtkWidget *sp_item)
 
492
void sc_gui_update_menu(void)
 
493
{
 
494
        GtkWidget *child, *menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(sc_info->menu_item));
 
495
        GList *l, *children = gtk_container_get_children(GTK_CONTAINER(menu));
 
496
 
 
497
        sc_ignore_callback = TRUE;
 
498
        for (l = children; l != NULL; l = g_list_next(l))
 
499
        {
 
500
                if ((child = GTK_BIN(l->data)->child) != NULL)
 
501
                {
 
502
                        if (GTK_IS_LABEL(child))
 
503
                        {
 
504
                                if (utils_str_equal(sc_info->default_language, gtk_label_get_text(GTK_LABEL(child))))
 
505
                                        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(l->data), TRUE);
 
506
                        }
 
507
                }
 
508
        }
 
509
        sc_ignore_callback = FALSE;
 
510
 
 
511
        update_labels();
 
512
}
 
513
 
 
514
 
 
515
void sc_gui_create_menu(GtkWidget *sp_item)
455
516
{
456
517
        GtkWidget *menu, *menu_item;
457
518
        guint i;
 
519
        GSList *group = NULL;
 
520
        gchar *label;
458
521
 
459
522
        gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), sp_item);
460
523
 
461
524
        menu = gtk_menu_new();
462
525
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(sp_item), menu);
463
526
 
464
 
        sc_info->submenu_item_default = gtk_menu_item_new_with_mnemonic(_("Default"));
 
527
        sc_info->submenu_item_default = gtk_menu_item_new();
465
528
        gtk_container_add(GTK_CONTAINER(menu), sc_info->submenu_item_default);
466
 
        g_signal_connect(sc_info->submenu_item_default, "activate", G_CALLBACK(menu_item_activate_cb), NULL);
 
529
        g_signal_connect(sc_info->submenu_item_default, "activate",
 
530
                G_CALLBACK(menu_item_toggled_cb), NULL);
 
531
 
 
532
        update_labels();
467
533
 
468
534
        menu_item = gtk_separator_menu_item_new();
469
535
        gtk_container_add(GTK_CONTAINER(menu), menu_item);
470
536
 
 
537
        sc_ignore_callback = TRUE;
471
538
        for (i = 0; i < sc_info->dicts->len; i++)
472
539
        {
473
 
                menu_item = gtk_menu_item_new_with_label(g_ptr_array_index(sc_info->dicts, i));
 
540
                label = g_ptr_array_index(sc_info->dicts, i);
 
541
                menu_item = gtk_radio_menu_item_new_with_label(group, label);
 
542
                group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menu_item));
 
543
                if (utils_str_equal(sc_info->default_language, label))
 
544
                        gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), TRUE);
474
545
                gtk_container_add(GTK_CONTAINER(menu), menu_item);
475
 
                g_signal_connect(menu_item, "activate",
476
 
                        G_CALLBACK(menu_item_activate_cb), g_ptr_array_index(sc_info->dicts, i));
 
546
                g_signal_connect(menu_item, "toggled", G_CALLBACK(menu_item_toggled_cb), label);
477
547
        }
478
 
 
479
 
        return sp_item;
 
548
        sc_ignore_callback = FALSE;
480
549
}
481
550
 
482
551