void history_insert_word(History *self, const gchar *word)
{
+ if(!word)
+ return;
if(!strlen(word))
return;
- //gboolean b;
- //GtkTreeIter iter;
- //GtkTreePath *path;
+
GtkComboBox *mainwnd_search = GTK_COMBO_BOX(gtk_builder_get_object(GTK_BUILDER(_builder), "mainwnd_search"));
GtkTreeModel *model = gtk_combo_box_get_model(mainwnd_search);
gtk_tree_model_foreach(model, history_remove_word, (gpointer)word);
gint n = prefs_get_int(self->prefs, "dictbar.word_hist");
if(n < 10) n = 10;
-#if 0
- while(gtk_tree_model_iter_n_children(model, NULL) > n)
- {
- path = gtk_tree_path_new_from_indices(n - 1, -1);
- b = gtk_tree_model_get_iter(model, &iter, path);
- gtk_tree_path_free(path);
- if(!b) break;
- gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
- }
- gtk_list_store_prepend(GTK_LIST_STORE(model), &iter);
- gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, word, -1);
-#else
+
while(gtk_tree_model_iter_n_children(model, NULL) > n)
gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(mainwnd_search), n - 1);
gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(mainwnd_search), word);
gtk_combo_box_set_active(mainwnd_search, 0);
-#endif
- return;
}
gboolean history_save_word(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
g_object_unref(pixbuf);
}
-void mainwnd_dict_groups_update(Mainwnd *self)
-{
- GtkTreeStore *dicts_store = GTK_TREE_STORE(gtk_builder_get_object(GTK_BUILDER(self->builder), "dicts_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_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), &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), &iter));
- if(i <= ngroup)
- ngroup = 0;
- }
- g_free(sgroup);
- builder_set_int(self->builder, "mainwnd_dict_group", ngroup);
-}
-
-static void mainwnd_dict_remove_cb(gpointer data, gpointer user_data)
+static void mainwnd_dict_remove_cb(GtkWidget *w, gpointer data)
{
- g_printf("remove_cb\n");
- //GtkContainer *c = GTK_CONTAINER(data);
- GtkWidget *w = GTK_WIDGET(data);
+ GtkContainer *c = GTK_CONTAINER(data);
if(GTK_IS_TOOL_ITEM(w))
- gtk_widget_destroy(w);
-// gtk_container_remove(c, 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);
- 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_container_foreach(GTK_CONTAINER(tb), mainwnd_dict_remove_cb, tb);
gtk_widget_show_all(tb);
}
binfo->active = gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(w));
}
-void mainwnd_search_btn_clicked_cb(GtkWidget *w, gpointer data)
-{
- Mainwnd *mw = MAINWND(data);
- const gchar *word = builder_get_str(mw->builder, "mainwnd_search");
- mainwnd_search(mw, word, -1);
-}
-
void mainwnd_dict_buttons_add(Mainwnd *self)
{
+ GtkToolbar *tb = GTK_TOOLBAR(gtk_builder_get_object(GTK_BUILDER(self->builder), "mainwnd_dicts"));
+ gtk_toolbar_insert(tb, gtk_separator_tool_item_new(), -1);
gint n = builder_get_int(self->builder, "mainwnd_dict_group");
if(n < 0)
return;
GtkTreeIter iter;
if(!dicts_get_nth(self->dicts, n, &iter))
return;
- GtkToolbar *tb = GTK_TOOLBAR(gtk_builder_get_object(GTK_BUILDER(self->builder), "mainwnd_dicts"));
gchar *title;
BOOK_INFO *binfo;
GtkTreeModel *store = GTK_TREE_MODEL(self->dicts->store);
mainwnd_dict_buttons_add(self);
}
+void mainwnd_dict_group_changed_cb(GtkComboBox *widget, gpointer data)
+{
+ Mainwnd *mw = MAINWND(data);
+ mainwnd_dict_buttons_update(mw);
+}
+
+void mainwnd_dict_groups_update(Mainwnd *self)
+{
+ GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self->builder), "mainwnd_dict_group"));
+ g_signal_handlers_block_by_func(w, mainwnd_dict_group_changed_cb, self);
+
+ GtkTreeStore *dicts_store = GTK_TREE_STORE(gtk_builder_get_object(GTK_BUILDER(self->builder), "dicts_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_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), &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), &iter));
+ if(i <= ngroup)
+ ngroup = 0;
+ }
+ g_free(sgroup);
+ builder_set_int(self->builder, "mainwnd_dict_group", ngroup);
+
+ g_signal_handlers_unblock_by_func(w, mainwnd_dict_group_changed_cb, self);
+}
+
+void mainwnd_search_btn_clicked_cb(GtkWidget *w, gpointer data)
+{
+ Mainwnd *mw = MAINWND(data);
+ const gchar *word = builder_get_str(mw->builder, "mainwnd_search");
+ mainwnd_search(mw, word, -1);
+}
+
gboolean mainwnd_results_key_press_event_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
Mainwnd *mw = MAINWND(data);
gint active = dicts_load(self->dicts);
mainwnd_dict_groups_update(self);
- mainwnd_dict_buttons_update(self);
builder_set_int(self->builder, "mainwnd_dict_group", active);
+ mainwnd_dict_buttons_update(self);
gint i;
GtkTreeIter iter;
mainwnd_search(mw, NULL, SEARCH_METHOD_COPYRIGHT);
}
-void mainwnd_dict_group_changed_cb(GtkComboBox *widget, gpointer data)
-{
- Mainwnd *mw = MAINWND(data);
- mainwnd_dict_buttons_update(mw);
-}
-
void mainwnd_prev_clicked_cb(GtkWidget *w, gpointer data)
{
history_prev(data);
#include "eb123.h"
#include "ebook.h"
#include "renderheadword.h"
+#include "render.h"
G_DEFINE_TYPE(RenderHeadword, render_headword, GTK_TYPE_CELL_RENDERER);
gboolean sub, sup;
gboolean pretend;
cairo_t *cr;
- //GdkWindow *window;
GtkWidget *widget;
GtkCellRendererState flags;
RenderHeadword *r;
GdkRGBA color;
gtk_style_context_get_color(context, state, &color);
gchar *spec = gdk_rgba_to_string(&color);
- //gchar *spec = gtk_color_selection_palette_to_string(&(my->widget->style->fg[state]), 1);
GdkPixbuf *pixbuf;
- /*
- GdkColor color;
- gdk_color_parse(spec, &color);
- */
if(spec) g_free(spec);
render_headword_get_size(NULL, my->widget, NULL, &x_offset, &y_offset, NULL, NULL);
if((pixbuf = ebook_read_gaiji(my->r->res->binfo, (gchar*)atts[1], &w, &h)))
{
if(!GTK_IS_WIDGET(widget))
return;
-#if 0
- GtkStyleContext *context = gtk_widget_get_style_context(widget);
- const PangoFontDescription *font_desc = gtk_style_context_get_font(context, GTK_STATE_FLAG_NORMAL);
- //GtkStyle *style = gtk_widget_get_style(widget);
-#endif
*h = 2*render_get_font_size(widget);
}
if(x_offset)