OSDN Git Service

changes in eb123.glade
[eb123/eb123.git] / src / mainwnd.c
index 7375978..3eda509 100644 (file)
@@ -296,14 +296,24 @@ void mainwnd_reset_font(Mainwnd *self)
 {
     gint custom_font = prefs_get_int(self->prefs, "mainwnd.custom_font");
     const gchar *fontstr = prefs_get_str(self->prefs, "mainwnd.font");
-
     const gchar *font = custom_font ? fontstr : "";
-    gchar *s = g_strdup_printf("style \"custom-font\"{font_name=\"%s\"}\nclass \"GtkWidget\" style \"custom-font\"", font);
-    gtk_rc_parse_string(s);
-    g_free(s);
+
+    static GtkCssProvider *provider = NULL;
     GdkScreen *screen = gtk_window_get_screen(GTK_WINDOW(self));
-    GtkSettings *settings = gtk_settings_get_for_screen(screen);
-    gtk_rc_reset_styles(settings);
+    if(provider)
+    {
+       gtk_style_context_remove_provider_for_screen(screen, GTK_STYLE_PROVIDER(provider));
+       g_object_unref(provider);
+       provider = NULL;
+    }
+    if(custom_font)
+    {
+       provider = gtk_css_provider_new();
+       gchar *s = g_strdup_printf("* {font: %s;}", font);
+       if(gtk_css_provider_load_from_data(GTK_CSS_PROVIDER (provider), s, -1, NULL))
+           gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER);
+       g_free(s);
+    }
 }
 
 void mainwnd_results_row_expanded_collapsed_cb(GtkTreeView *tree, GtkTreeIter *iter, GtkTreePath *path, gpointer data)
@@ -418,27 +428,26 @@ void mainwnd_status_icon_add(Mainwnd *self)
 void mainwnd_dict_groups_update(Mainwnd *self)
 {
     GtkTreeStore *dicts_store = GTK_TREE_STORE(gtk_builder_get_object(GTK_BUILDER(self->builder), "dicts_store"));
-    GtkListStore *groups = GTK_LIST_STORE(gtk_builder_get_object(GTK_BUILDER(self->builder), "mainwnd_dictgroups_store"));
+    GtkComboBoxText *combo = GTK_COMBO_BOX_TEXT(gtk_builder_get_object(GTK_BUILDER(self->builder), "mainwnd_dict_group"));
     gchar *sgroup = g_strdup(builder_get_str(self->builder, "mainwnd_dict_group"));
     gint ngroup = builder_get_int(self->builder, "mainwnd_dict_group");        
     if(ngroup < 0) ngroup = 0;
-    gtk_list_store_clear(groups);
-    GtkTreeIter iter1, iter2;
-    if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(dicts_store), &iter1))
+    gtk_combo_box_text_remove_all(combo);
+    GtkTreeIter iter;
+    if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(dicts_store), &iter))
     {
        gint i = 0;
        do { 
            gchar *title;
-           gtk_tree_model_get(GTK_TREE_MODEL(dicts_store), &iter1, DICT_ALIAS, &title, -1);
-           gtk_list_store_append(groups, &iter2);
-           gtk_list_store_set(groups, &iter2, 0, title, -1);
+           gtk_tree_model_get(GTK_TREE_MODEL(dicts_store), &iter, DICT_ALIAS, &title, -1);
+           gtk_combo_box_text_append_text(combo, title);
            if(ngroup == i++)
            {
                if(g_strcmp0(sgroup, title))
                    ngroup = 0;
            }
            g_free(title);
-       } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(dicts_store), &iter1));
+       } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(dicts_store), &iter));
        if(i <= ngroup)
            ngroup = 0;
     }
@@ -446,18 +455,24 @@ void mainwnd_dict_groups_update(Mainwnd *self)
     builder_set_int(self->builder, "mainwnd_dict_group", ngroup);
 }
 
-static void mainwnd_dict_remove_cb(GtkWidget *w, gpointer data)
+static void mainwnd_dict_remove_cb(gpointer data, gpointer user_data)
 {
-    GtkContainer *c = GTK_CONTAINER(data);
+    g_printf("remove_cb\n");
+    //GtkContainer *c = GTK_CONTAINER(data);
+    GtkWidget *w = GTK_WIDGET(data);
     if(GTK_IS_TOOL_ITEM(w))
-        gtk_container_remove(c, w);
+       gtk_widget_destroy(w);
+//        gtk_container_remove(c, w);
 }
 
 void mainwnd_dict_buttons_remove(Mainwnd *self)
 {
     GtkWidget *tb = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self->builder), "mainwnd_dicts"));
     gtk_widget_hide(tb);
-    gtk_container_forall(GTK_CONTAINER(tb), mainwnd_dict_remove_cb, tb);
+    GList *list = gtk_container_get_children(GTK_CONTAINER(tb));
+    if(gtk_toolbar_get_n_items(tb) > 0)
+       g_list_foreach(list , mainwnd_dict_remove_cb, tb);
+    //gtk_container_foreach(GTK_CONTAINER(tb), mainwnd_dict_remove_cb, tb);
     gtk_widget_show_all(tb);
 }