~vcs-imports/artha/trunk

« back to all changes in this revision

Viewing changes to src/gui.c

  • Committer: legends2k
  • Date: 2012-09-19 12:57:51 UTC
  • Revision ID: legends2k-20120919125751-rfhf262mtgztxxee
* Added a new option in Preferences to toggle display of polysemy classification
* Updated glade interface file to GTK+ 2.24 by using GtkComboBox instead of the deprecated GtkComboBoxEntry
* Fixed issues in finding libnotify.so across distributions by enumerating its versions from 4 till 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
93
93
static void button_next_clicked(GtkToolButton *toolbutton, gpointer user_data);
94
94
static void button_prev_clicked(GtkToolButton *toolbutton, gpointer user_data);
95
95
static gboolean combo_query_scroll(GtkWidget *widget, GdkEventScroll *event, gpointer user_data);
96
 
static void setup_toolbar(GtkBuilder *gui_builder, GtkWidget *hotkey_editor_dialog);
 
96
static void setup_toolbar(GtkBuilder *gui_builder);
97
97
static GtkMenu *create_popup_menu(GtkBuilder *gui_builder);
98
98
static void create_text_view_tags(GtkBuilder *gui_builder);
99
99
static gboolean load_preferences(GtkWindow *parent);
106
106
#endif //X11_AVAILABLE
107
107
static gboolean register_unregister_hotkey(gboolean first_run, gboolean setup_hotkey);
108
108
gboolean grab_ungrab_with_ignorable_modifiers(GtkAccelKey *binding, gboolean grab);
109
 
static void setup_hotkey_editor(GtkBuilder *gui_builder, GtkWidget **hotkey_editor_dialog);
 
109
static void setup_hotkey_editor(GtkBuilder *gui_builder);
110
110
static void show_hotkey_editor(GtkToolButton *toolbutton, gpointer user_data);
111
111
static void destructor(GtkBuilder *gui_builder);
112
112
static void show_message_dlg(GtkWidget *parent_window, MessageResposeCode msg_code);
298
298
{
299
299
        gchar *selection = NULL;
300
300
        GtkBuilder *gui_builder = NULL;
301
 
        GtkComboBoxEntry *combo_query = NULL;
 
301
        GtkComboBox *combo_query = NULL;
302
302
        GtkEntry *text_entry_query = NULL;
303
303
        GtkButton *button_search = NULL;
304
304
        GtkWindow *window = NULL;
329
329
#endif
330
330
 
331
331
                gui_builder = GTK_BUILDER(user_data);
332
 
                combo_query = GTK_COMBO_BOX_ENTRY(gtk_builder_get_object(gui_builder, COMBO_QUERY));
 
332
                combo_query = GTK_COMBO_BOX(gtk_builder_get_object(gui_builder, COMBO_QUERY));
333
333
 
334
334
                if(selection)
335
335
                {
375
375
{
376
376
        GtkBuilder *gui_builder = GTK_BUILDER(user_data);
377
377
        GtkWindow *window = GTK_WINDOW(gtk_builder_get_object(gui_builder, WINDOW_MAIN));
378
 
        GtkComboBoxEntry *combo_query = NULL;
 
378
        GtkComboBox *combo_query = NULL;
379
379
 
380
380
        if(gtk_widget_get_visible(GTK_WIDGET(window)))
381
381
                gtk_widget_hide(GTK_WIDGET(window));
386
386
                if(notifier)
387
387
                        notify_notification_close(notifier, NULL);
388
388
                show_window(window);
389
 
                combo_query = GTK_COMBO_BOX_ENTRY(gtk_builder_get_object(gui_builder, COMBO_QUERY));
 
389
                combo_query = GTK_COMBO_BOX(gtk_builder_get_object(gui_builder, COMBO_QUERY));
390
390
                gtk_widget_grab_focus(GTK_WIDGET(combo_query));
391
391
        }
392
392
}
1701
1701
static void text_view_selection_made(GtkWidget *widget, GtkSelectionData *sel_data, guint time, gpointer user_data)
1702
1702
{
1703
1703
        GtkBuilder *gui_builder = GTK_BUILDER(user_data);
1704
 
        GtkComboBoxEntry *combo_query = NULL;
 
1704
        GtkComboBox *combo_query = NULL;
1705
1705
        GtkEntry *txtQuery = NULL;
1706
1706
        GtkButton *button_search = NULL;
1707
1707
        gchar *selection = (gchar*) gtk_selection_data_get_text(sel_data);
1708
1708
 
1709
1709
        if(selection)
1710
1710
        {
1711
 
                combo_query = GTK_COMBO_BOX_ENTRY(gtk_builder_get_object(gui_builder, COMBO_QUERY));
 
1711
                combo_query = GTK_COMBO_BOX(gtk_builder_get_object(gui_builder, COMBO_QUERY));
1712
1712
                txtQuery = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo_query)));
1713
1713
                button_search = GTK_BUTTON(gtk_builder_get_object(gui_builder, BUTTON_SEARCH));
1714
1714
        
2128
2128
        gchar *sel_term = NULL;
2129
2129
        GtkTreeModel *tree_store = NULL;
2130
2130
        GtkTreeIter iter = {0};
2131
 
        GtkComboBoxEntry *combo_query = NULL;
 
2131
        GtkComboBox *combo_query = NULL;
2132
2132
        GtkEntry *txtQuery = NULL;
2133
2133
        GtkButton *button_search = NULL;
2134
2134
        GtkBuilder *gui_builder = GTK_BUILDER(user_data);
2140
2140
 
2141
2141
                if(sel_term)
2142
2142
                {
2143
 
                        combo_query = GTK_COMBO_BOX_ENTRY(gtk_builder_get_object(gui_builder, COMBO_QUERY));
 
2143
                        combo_query = GTK_COMBO_BOX(gtk_builder_get_object(gui_builder, COMBO_QUERY));
2144
2144
                        txtQuery = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo_query)));
2145
2145
                        button_search = GTK_BUTTON(gtk_builder_get_object(gui_builder, BUTTON_SEARCH));
2146
2146
 
2170
2170
        list_store_query = gtk_list_store_new(1, G_TYPE_STRING);
2171
2171
        g_signal_connect(GTK_TREE_MODEL(list_store_query), "row-inserted", G_CALLBACK(query_list_updated), gui_builder);
2172
2172
        gtk_combo_box_set_model(combo_query, GTK_TREE_MODEL(list_store_query));
2173
 
        gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(combo_query), 0);
 
2173
        gtk_combo_box_set_entry_text_column(combo_query, 0);
2174
2174
        g_object_unref(list_store_query);
2175
2175
        
2176
2176
        for(i = 0; i < TOTAL_RELATIVES; i++)
2298
2298
        return TRUE;
2299
2299
}
2300
2300
 
2301
 
static void setup_toolbar(GtkBuilder *gui_builder, GtkWidget *hotkey_editor_dialog)
 
2301
static void setup_toolbar(GtkBuilder *gui_builder)
2302
2302
{
2303
2303
        GtkToolbar *toolbar = NULL;
2304
2304
        GtkToolItem *toolbar_item = NULL;
2338
2338
        gtk_toolbar_insert(toolbar, toolbar_item, -1);
2339
2339
 
2340
2340
        toolbar_item = gtk_tool_button_new_from_stock(GTK_STOCK_PREFERENCES);
2341
 
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolbar_item), STR_TOOLITEM_HOTKEY);
 
2341
        gtk_tool_button_set_label(GTK_TOOL_BUTTON(toolbar_item), STR_TOOLITEM_OPTIONS);
2342
2342
        gtk_tool_button_set_use_underline(GTK_TOOL_BUTTON(toolbar_item), TRUE);
2343
 
        gtk_tool_item_set_tooltip_text(toolbar_item, TOOLITEM_TOOLTIP_HOTKEY);
2344
 
        g_signal_connect(toolbar_item, "clicked", G_CALLBACK(show_hotkey_editor), hotkey_editor_dialog);
 
2343
        gtk_tool_item_set_tooltip_text(toolbar_item, TOOLITEM_TOOLTIP_OPTIONS);
 
2344
        g_signal_connect(toolbar_item, "clicked", G_CALLBACK(show_hotkey_editor), gui_builder);
2345
2345
        gtk_toolbar_insert(toolbar, toolbar_item, -1);
2346
2346
 
2347
2347
        /* if mod notify is present */
2901
2901
        return(grab_ungrab_with_ignorable_modifiers(&app_hotkey, setup_hotkey));
2902
2902
}
2903
2903
 
2904
 
static void setup_hotkey_editor(GtkBuilder *gui_builder, GtkWidget **hotkey_editor_dialog)
2905
 
{
2906
 
        GtkLabel *hotkey_label = NULL;
2907
 
        GtkContainer *hbox = NULL;
 
2904
static void handle_polysemy_show_change(GtkToggleButton *polysemy_show_btn, gpointer user_data)
 
2905
{
 
2906
        show_polysemy = gtk_toggle_button_get_active(polysemy_show_btn);
 
2907
}
 
2908
 
 
2909
static void setup_hotkey_editor(GtkBuilder *gui_builder)
 
2910
{
 
2911
        GtkLabel *hotkey_label = GTK_LABEL(gtk_builder_get_object(gui_builder, DIALOG_HOTKEY_LABEL));
 
2912
        GtkContainer *hbox = GTK_CONTAINER(gtk_builder_get_object(gui_builder, DIALOG_HOTKEY_HBOX));
 
2913
        GtkToggleButton *polysemy_show_btn = GTK_TOGGLE_BUTTON(gtk_builder_get_object(gui_builder, DIALOG_POLYSEMY_CHKBTN));
2908
2914
        GtkWidget *hotkey_accel_cell = NULL;
2909
 
 
2910
 
        *hotkey_editor_dialog = GTK_WIDGET(gtk_builder_get_object(gui_builder, DIALOG_HOTKEY));
2911
 
        hotkey_label = GTK_LABEL(gtk_builder_get_object(gui_builder, DIALOG_HOTKEY_LABEL));
2912
 
        hbox = GTK_CONTAINER(gtk_builder_get_object(gui_builder, DIALOG_HOTKEY_HBOX));
 
2915
        GtkDialog *settings_dialog = GTK_DIALOG(gtk_builder_get_object(gui_builder, DIALOG_HOTKEY));
2913
2916
 
2914
2917
        hotkey_accel_cell = create_hotkey_editor();
2915
2918
        gtk_container_add(hbox, hotkey_accel_cell);
2916
2919
 
2917
2920
        gtk_label_set_mnemonic_widget(hotkey_label, hotkey_accel_cell);
 
2921
        gtk_toggle_button_set_active(polysemy_show_btn, show_polysemy);
2918
2922
 
2919
 
        g_signal_connect(GTK_WIDGET(*hotkey_editor_dialog), "response", G_CALLBACK(gtk_widget_hide), NULL);
 
2923
        g_signal_connect(GTK_WIDGET(settings_dialog), "response", G_CALLBACK(gtk_widget_hide), NULL);
 
2924
        g_signal_connect(GTK_WIDGET(polysemy_show_btn), "toggled", G_CALLBACK(handle_polysemy_show_change), NULL);
2920
2925
}
2921
2926
 
2922
2927
static void show_hotkey_editor(GtkToolButton *toolbutton, gpointer user_data)
2923
2928
{
2924
2929
        GtkAccelKey hotkey_backup = app_hotkey;
2925
 
        gint hotkey_dialog_response = gtk_dialog_run(GTK_DIALOG(user_data));
2926
 
 
2927
 
        /* if prev. hotkey and app_hotkey are not the same and 'Apply' wasn't clicked
2928
 
           then revert hotkey before saving the preferences */
2929
 
        if(hotkey_backup.accel_key != app_hotkey.accel_key || 
2930
 
           hotkey_backup.accel_mods != app_hotkey.accel_mods || 
2931
 
           hotkey_backup.accel_flags != app_hotkey.accel_flags)
 
2930
        gboolean show_polysemy_backup = show_polysemy;
 
2931
        GtkBuilder *gui_builder = GTK_BUILDER(user_data);
 
2932
        GtkDialog *settings_dialog = GTK_DIALOG(gtk_builder_get_object(gui_builder, DIALOG_HOTKEY));
 
2933
        GtkButton *search_button = GTK_BUTTON(gtk_builder_get_object(gui_builder, BUTTON_SEARCH));
 
2934
 
 
2935
        gint hotkey_dialog_response = gtk_dialog_run(settings_dialog);
 
2936
 
 
2937
        if(GTK_RESPONSE_APPLY != hotkey_dialog_response)
2932
2938
        {
2933
 
                if(GTK_RESPONSE_APPLY != hotkey_dialog_response)
 
2939
                // set the old polysemy setting
 
2940
                show_polysemy = show_polysemy_backup;
 
2941
 
 
2942
                /* if prev. hotkey and app_hotkey are not the same and 'Apply' wasn't clicked
 
2943
                   then revert hotkey before saving the preferences */
 
2944
                if(hotkey_backup.accel_key != app_hotkey.accel_key || 
 
2945
                   hotkey_backup.accel_mods != app_hotkey.accel_mods || 
 
2946
                   hotkey_backup.accel_flags != app_hotkey.accel_flags)
2934
2947
                {
2935
2948
                        grab_ungrab_with_ignorable_modifiers(&app_hotkey, FALSE);
2936
2949
                        if (grab_ungrab_with_ignorable_modifiers(&hotkey_backup, TRUE))
2941
2954
                                memset(&app_hotkey, 0, sizeof(GtkAccelKey));
2942
2955
                        }
2943
2956
                }
2944
 
 
2945
 
                /* set hotkey flag */
2946
 
                hotkey_set = (gboolean) app_hotkey.accel_key;
2947
 
 
 
2957
        }
 
2958
        else
 
2959
        {
 
2960
                if (show_polysemy != show_polysemy_backup)
 
2961
                {
 
2962
                        last_search_successful = FALSE;
 
2963
                        gtk_button_clicked(search_button);
 
2964
                }
2948
2965
                save_preferences();
2949
2966
        }
 
2967
        /* set hotkey flag */
 
2968
        hotkey_set = (gboolean) app_hotkey.accel_key;
2950
2969
}
2951
2970
 
2952
2971
static void destructor(GtkBuilder *gui_builder)
3208
3227
 
3209
3228
                                        /* save preferences here - after all setting based loads are done */
3210
3229
                                        save_preferences();
3211
 
                                        
3212
 
                                        setup_hotkey_editor(gui_builder, &hotkey_editor_dialog);
 
3230
 
 
3231
                                        setup_hotkey_editor(gui_builder);
 
3232
                                        hotkey_editor_dialog = GTK_WIDGET(gtk_builder_get_object(gui_builder, DIALOG_HOTKEY));
3213
3233
 
3214
3234
                                        icon_file_path = g_build_filename(ICON_DIR, ICON_FILE, NULL);
3215
3235
                                        if(g_file_test(icon_file_path, G_FILE_TEST_IS_REGULAR))
3251
3271
                                        combo_query = GTK_WIDGET(gtk_builder_get_object(gui_builder, COMBO_QUERY));
3252
3272
                                        g_signal_connect(combo_query, "changed", G_CALLBACK(combo_query_changed), gui_builder);
3253
3273
 
3254
 
                                        /* get the GtkEntry in GtkComboBoxEntry and set activates-default to TRUE; so that
 
3274
                                        /* get the GtkEntry in GtkComboBox and set activates-default to TRUE; so that
3255
3275
                                           it pass the ENTER key signal to query button */
3256
3276
                                        combo_entry = gtk_bin_get_child(GTK_BIN(combo_query));
3257
3277
                                        g_object_set(combo_entry, "activates-default", TRUE, NULL);
3259
3279
 
3260
3280
                                        create_text_view_tags(gui_builder);
3261
3281
 
3262
 
                                        setup_toolbar(gui_builder, hotkey_editor_dialog);
 
3282
                                        setup_toolbar(gui_builder);
3263
3283
 
3264
3284
                                        /* do main window specific connects */
3265
3285
                                        g_signal_connect(window, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);