diff --git a/.gitignore b/.gitignore index abede828db08dcfdab3ebba6ab6dbf18b160336d..2cda42f0781223809a806411763ff8169f0000de 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,7 @@ compile autom4te* INSTALL xfce4-dict-*.tar.bz2 +lib/resources.c +lib/resources.h +lib/dbus.c +lib/dbus.h diff --git a/Makefile.am b/Makefile.am index 01cc3f2b28db4a5e4ad0f67b05f3c90dc8a34614..669024afd75a868a6c1402928bc7a80a39e01d0a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,7 +19,7 @@ EXTRA_DIST = \ intltool-extract.in \ intltool-merge.in \ intltool-update.in \ - xfce4-dict.svg + pixmaps/xfce4-dict.svg DISTCLEANFILES = \ intltool-extract \ @@ -27,7 +27,7 @@ DISTCLEANFILES = \ intltool-update hicolor48dir = $(datadir)/icons/hicolor/scalable/apps -hicolor48_DATA = xfce4-dict.svg +hicolor48_DATA = pixmaps/xfce4-dict.svg gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor diff --git a/configure.ac.in b/configure.ac.in index 7061c2d14825b5e5f8a23c124075ddb091b967cb..e8fef795096a74dcb6f24dd8920e5a5f89adc2d7 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -11,7 +11,7 @@ m4_define([xfce4_dict_version], [xfce4_dict_version_major().xfce4_dict_version_m dnl *************************** dnl *** Initialize autoconf *** dnl *************************** -AC_COPYRIGHT([Copyright (c) 2006-2015 Xfce Development Team. All rights reserved.]) +AC_COPYRIGHT([Copyright (c) 2006-2016 Xfce Development Team. All rights reserved.]) AC_INIT([xfce4-dict], [xfce4_dict_version], [http://bugzilla.xfce.org/], [xfce4-dict]) AC_PREREQ([2.60]) AC_CONFIG_MACRO_DIR([m4]) @@ -54,12 +54,17 @@ dnl *********************************** dnl *** Check for required packages *** dnl *********************************** XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.24.0]) -XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.20.0]) -XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.10.0]) +XDT_CHECK_PACKAGE([GTK], [gtk+-3.0], [3.20.0]) +XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-2], [4.12.0]) XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.10.0]) -XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.10.0]) +XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-2.0], [4.10.0]) XDT_CHECK_PACKAGE([X11], [x11]) +dnl *********************************** +dnl *** Check for gdbus-codegen *** +dnl *********************************** +AC_CHECK_PROG([GDBUS_CODEGEN],[gdbus-codegen],[gdbus-codegen]) + dnl *********************************** dnl *** Check for debugging support *** dnl *********************************** diff --git a/lib/Makefile.am b/lib/Makefile.am index 874f38641d540047007ff5434f2f57a941fe9998..44f9c4ec2000ea9b9821cacdb37fb3dc0cfd7480 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -2,6 +2,8 @@ noinst_LTLIBRARIES = \ libdict.la libdict_la_SOURCES = \ + dbus.c \ + dbus.h \ common.c \ common.h \ dictd.c \ @@ -11,6 +13,8 @@ libdict_la_SOURCES = \ libdict.h \ prefs.c \ prefs.h \ + resources.c \ + resources.h \ speedreader.c \ speedreader.h \ spell.c \ @@ -30,19 +34,19 @@ libdict_la_LIBADD = \ $(LIBXFCE4UI_LIBS) \ @GTHREAD_LIBS@ +DISTCLEANFILES = \ + resources.c \ + resources.h \ + dbus.c \ + dbus.h -noinst_DATA = \ - inline-icon.h +gui.c: resources.c dbus.c -EXTRA_DIST = \ - inline-icon.h +resources.c: resources.h + glib-compile-resources resources.xml --sourcedir=../pixmaps --generate-source --c-name dict -if MAINTAINER_MODE -# the target isn't named as the header file on -# purpose to avoid automatic creation of the file -# while building -inline-icon: $(top_srcdir)/xfce4-dict.svg - gdk-pixbuf-csource --raw \ - --name=dict_icon_data \ - $(top_srcdir)/xfce4-dict.svg > $(srcdir)/inline-icon.h -endif +resources.h: + glib-compile-resources resources.xml --sourcedir=../pixmaps --generate-header --c-name dict + +dbus.c: + gdbus-codegen --interface-prefix org.xfce --generate-c-code dbus dbus.xml diff --git a/lib/common.c b/lib/common.c index e80b05124aa74cd4831b1e45d15f529933ba101d..cfad1f0189bc310f124fa2531cec1cc14c6c925d 100644 --- a/lib/common.c +++ b/lib/common.c @@ -38,6 +38,7 @@ #include "spell.h" #include "dictd.h" #include "gui.h" +#include "dbus.h" @@ -144,8 +145,7 @@ static gboolean open_browser(DictData *dd, const gchar *uri) argv[1] = (gchar*) uri; argv[2] = NULL; - result = gdk_spawn_on_screen(gtk_widget_get_screen(dd->window), NULL, argv, NULL, - G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); + result = g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL); g_free(browser_path); @@ -218,7 +218,8 @@ void dict_search_word(DictData *dd, const gchar *word) /* sanity checks */ if (! NZV(word)) { - dict_gui_status_add(dd, _("Invalid input")); + /* just show the main window */ + dict_gui_show_main_window(dd); return; } @@ -233,16 +234,18 @@ void dict_search_word(DictData *dd, const gchar *word) dict_gui_set_panel_entry_text(dd, ""); return; } - gtk_entry_set_text(GTK_ENTRY(dd->main_entry), dd->searched_word); - dict_gui_set_panel_entry_text(dd, dd->searched_word); } else { dd->searched_word = g_strdup(word); } + + /* Set the main entry text */ + gtk_entry_set_text(GTK_ENTRY(dd->main_entry), dd->searched_word); + /* remove leading and trailing spaces */ g_strstrip(dd->searched_word); - gtk_combo_box_prepend_text(GTK_COMBO_BOX(dd->main_combo), dd->searched_word); + gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(dd->main_combo), dd->searched_word); dict_gui_clear_text_buffer(dd); @@ -303,32 +306,6 @@ static void parse_geometry(DictData *dd, const gchar *str) } -static gdouble scale_round(gdouble val, gdouble factor) -{ - /*val = floor(val * factor + 0.5);*/ - val = floor(val); - val = MAX(val, 0); - val = MIN(val, factor); - - return val; -} - - -static gchar *get_hex_from_color(GdkColor *color) -{ - gchar *buffer = g_malloc0(9); - - g_return_val_if_fail(color != NULL, NULL); - - g_snprintf(buffer, 8, "#%02X%02X%02X", - (guint) (scale_round(color->red / 256, 255)), - (guint) (scale_round(color->green / 256, 255)), - (guint) (scale_round(color->blue / 256, 255))); - - return buffer; -} - - static gchar *get_spell_program(void) { gchar *path; @@ -450,14 +427,14 @@ void dict_read_rc_file(DictData *dd) else dd->spell_dictionary = spell_dictionary_default; - dd->color_link = g_new0(GdkColor, 1); - gdk_color_parse(link_color_str, dd->color_link); - dd->color_phonetic = g_new0(GdkColor, 1); - gdk_color_parse(phon_color_str, dd->color_phonetic); - dd->color_incorrect = g_new0(GdkColor, 1); - gdk_color_parse(error_color_str, dd->color_incorrect); - dd->color_correct = g_new0(GdkColor, 1); - gdk_color_parse(success_color_str, dd->color_correct); + dd->color_link = g_new0(GdkRGBA, 1); + gdk_rgba_parse(dd->color_link, link_color_str); + dd->color_phonetic = g_new0(GdkRGBA, 1); + gdk_rgba_parse(dd->color_phonetic, phon_color_str); + dd->color_incorrect = g_new0(GdkRGBA, 1); + gdk_rgba_parse(dd->color_incorrect, error_color_str); + dd->color_correct = g_new0(GdkRGBA, 1); + gdk_rgba_parse(dd->color_correct, success_color_str); dd->speedreader_mark_paragraphs = mark_paragraphs; dd->speedreader_wpm = wpm; @@ -489,10 +466,10 @@ void dict_write_rc_file(DictData *dd) xfce_rc_write_entry(rc, "spell_bin", dd->spell_bin); xfce_rc_write_entry(rc, "spell_dictionary", dd->spell_dictionary); - link_color_str = get_hex_from_color(dd->color_link); - phon_color_str = get_hex_from_color(dd->color_phonetic); - error_color_str = get_hex_from_color(dd->color_incorrect); - success_color_str = get_hex_from_color(dd->color_correct); + link_color_str = gdk_rgba_to_string(dd->color_link); + phon_color_str = gdk_rgba_to_string(dd->color_phonetic); + error_color_str = gdk_rgba_to_string(dd->color_incorrect); + success_color_str = gdk_rgba_to_string(dd->color_correct); xfce_rc_write_entry(rc, "link_color", link_color_str); xfce_rc_write_entry(rc, "phonetic_color", phon_color_str); xfce_rc_write_entry(rc, "error_color", error_color_str); @@ -545,27 +522,13 @@ void dict_free_data(DictData *dd) } -void dict_drag_data_received(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y, +void dict_drag_data_received(GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint ltime, DictData *dd) { - if ((data != NULL) && (data->length >= 0) && (data->format == 8)) + if ((data != NULL) && (gtk_selection_data_get_length(data) >= 0) && (gtk_selection_data_get_format(data) == 8)) { -/* - GtkWidget *source = gtk_drag_get_source_widget(drag_context); - - if (widget == dd->main_entry && - source != NULL && - gtk_widget_get_toplevel(source) == dd->window) - { - gtk_entry_set_text(GTK_ENTRY(dd->main_entry), ""); - } - else -*/ { - dict_search_word(dd, (const gchar*) data->data); - } - - drag_context->action = GDK_ACTION_COPY; - gtk_drag_finish(drag_context, TRUE, FALSE, ltime); + dict_search_word(dd, (const gchar*) gtk_selection_data_get_data (data)); + gtk_drag_finish(context, TRUE, FALSE, ltime); } } @@ -632,3 +595,35 @@ gchar *dict_get_clipboard_contents(void) return text; } + + +static gboolean on_handle_search(Dict *skeleton, GDBusMethodInvocation *invocation, + const gchar *arg_phrase, gpointer user_data) +{ + dict_search_word((DictData *) user_data, arg_phrase); + dict_complete_search(skeleton, invocation); + return TRUE; +} + + +static void on_name_acquired(GDBusConnection *connection, const gchar *name, + gpointer user_data) +{ + Dict *skeleton = dict_skeleton_new(); + g_signal_connect (skeleton, "handle-search", G_CALLBACK(on_handle_search), user_data); + g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton), + connection, "/org/xfce/Dict", NULL); +} + + +void dict_acquire_dbus_name(DictData *dd) +{ + g_bus_own_name(G_BUS_TYPE_SESSION, + "org.xfce.Dict", + G_BUS_NAME_OWNER_FLAGS_NONE, + NULL, + on_name_acquired, + NULL, + dd, + NULL); +} diff --git a/lib/common.h b/lib/common.h index 2525b6679b468802f09f8d2b9bf2219dc36e95b3..ab57d514c705ea2569a0ceae6bb018675d41a4f6 100644 --- a/lib/common.h +++ b/lib/common.h @@ -110,10 +110,10 @@ typedef struct GtkTextMark *mark_click; GdkPixbuf *icon; - GdkColor *color_link; - GdkColor *color_phonetic; - GdkColor *color_correct; - GdkColor *color_incorrect; + GdkRGBA *color_link; + GdkRGBA *color_phonetic; + GdkRGBA *color_correct; + GdkRGBA *color_incorrect; /* speed reader */ gint speedreader_wpm; @@ -132,9 +132,10 @@ void dict_drag_data_received(GtkWidget *widget, GdkDragContext *drag_context, gi GtkSelectionData *data, guint info, guint ltime, DictData *dd); DictData *dict_create_dictdata(void); -gboolean dict_start_web_query(DictData *dd, const gchar *word); -gchar *dict_get_web_query_uri(DictData *dd, const gchar *word); -gchar *dict_get_clipboard_contents(void); +gboolean dict_start_web_query(DictData *dd, const gchar *word); +gchar *dict_get_web_query_uri(DictData *dd, const gchar *word); +gchar *dict_get_clipboard_contents(void); +void dict_acquire_dbus_name(DictData *dd); void dict_show_msgbox(DictData *dd, gint type, const gchar *text, ...) G_GNUC_PRINTF (3, 4); diff --git a/lib/dbus.xml b/lib/dbus.xml new file mode 100644 index 0000000000000000000000000000000000000000..1c72d0d2382870ffeaa3adc64b0d3a39de0e0e14 --- /dev/null +++ b/lib/dbus.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd"> + <interface name="org.xfce.Dict"> + <method name="Search"> + <arg name="phrase" type="s" direction="in"/> + </method> + </interface> +</node> diff --git a/lib/dictd.c b/lib/dictd.c index f2e9781310480897458461e0307902f53a402084..7664e0ca7f8b050a6fd43e821db0b375bfc80edc 100644 --- a/lib/dictd.c +++ b/lib/dictd.c @@ -650,7 +650,7 @@ static void signal_cb(gint sig) } -static void dictd_init() +static void dictd_init(void) { #ifdef SIGALRM static gboolean initialized = FALSE; @@ -679,7 +679,7 @@ void dict_dictd_start_query(DictData *dd, const gchar *word) dictd_init(); /* start the thread to query the server */ - g_thread_create((GThreadFunc) ask_server, dd, FALSE, NULL); + g_thread_new(NULL, (GThreadFunc) ask_server, dd); } } @@ -750,25 +750,26 @@ void dict_dictd_get_information(GtkWidget *button, DictData *dd) dialog = gtk_dialog_new_with_buttons(text, GTK_WINDOW(dd->window), GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); - vbox = gtk_vbox_new(FALSE, 12); + "gtk-close", GTK_RESPONSE_CLOSE, NULL); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox); + gtk_container_add(GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox); gtk_box_set_spacing(GTK_BOX(vbox), 6); g_free(text); - gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400); + gtk_window_set_default_size(GTK_WINDOW(dialog), 550, 400); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE); text = g_strconcat("<tt>", buffer, "</tt>", NULL); label = gtk_label_new(text); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + gtk_widget_set_vexpand(label, TRUE); g_free(text); swin = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), label); + gtk_container_add(GTK_CONTAINER(swin), label); gtk_box_pack_start(GTK_BOX(vbox), swin, TRUE, TRUE, 0); @@ -847,7 +848,7 @@ void dict_dictd_get_list(GtkWidget *button, DictData *dd) i = gtk_tree_model_iter_n_children(gtk_combo_box_get_model(GTK_COMBO_BOX(dict_combo)), NULL); for (i -= 1; i > 2; i--) /* first three entries (*, ! and ----) should always exist */ { - gtk_combo_box_remove_text(GTK_COMBO_BOX(dict_combo), i); + gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(dict_combo), i); } /* parse output */ @@ -859,7 +860,7 @@ void dict_dictd_get_list(GtkWidget *button, DictData *dd) i = 0; while (i < max_lines && lines[i][0] != '.') { - gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), lines[i]); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dict_combo), lines[i]); i++; } @@ -870,4 +871,3 @@ void dict_dictd_get_list(GtkWidget *button, DictData *dd) * the list and we also don't know whether it exists at all, and I don't walk through the list */ gtk_combo_box_set_active(GTK_COMBO_BOX(dict_combo), 0); } - diff --git a/lib/gui.c b/lib/gui.c index 971af694b6b6890670d0605b13b6d8fd449e4acf..1f453cc88215feca59817d56801519e69f41c06e 100644 --- a/lib/gui.c +++ b/lib/gui.c @@ -32,7 +32,7 @@ #include "common.h" #include "gui.h" -#include "inline-icon.h" +#include "resources.h" #include "speedreader.h" @@ -120,8 +120,8 @@ static gboolean textview_key_press_event(GtkWidget *text_view, GdkEventKey *even switch (event->keyval) { - case GDK_Return: - case GDK_KP_Enter: + case GDK_KEY_Return: + case GDK_KEY_KP_Enter: { gtk_text_buffer_get_iter_at_mark(dd->main_textbuffer, &iter, gtk_text_buffer_get_insert(dd->main_textbuffer)); @@ -226,8 +226,14 @@ static gboolean textview_motion_notify_event(GtkWidget *text_view, GdkEventMotio static gboolean textview_visibility_notify_event(GtkWidget *text_view, GdkEventVisibility *event) { gint wx, wy, bx, by; + GdkDevice *pointer; + GdkSeat *seat; - gdk_window_get_pointer(text_view->window, &wx, &wy, NULL); + seat = gdk_display_get_default_seat (gdk_display_get_default ()); + pointer = gdk_seat_get_pointer (seat); + + gdk_window_get_device_position(gtk_widget_get_window (text_view), + pointer, &wx, &wy, NULL); gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(text_view), GTK_TEXT_WINDOW_WIDGET, wx, wy, &bx, &by); @@ -246,8 +252,14 @@ static gchar *textview_get_text_at_cursor(DictData *dd) if (! gtk_text_buffer_get_selection_bounds(dd->main_textbuffer, &start, &end)) { gint wx, wy, bx, by; + GdkDevice *pointer; + GdkSeat *seat; + + seat = gdk_display_get_default_seat (gdk_display_get_default ()); + pointer = gdk_seat_get_pointer (seat); - gdk_window_get_pointer(dd->main_textview->window, &wx, &wy, NULL); + gdk_window_get_device_position(gtk_widget_get_window (dd->main_textview), + pointer, &wx, &wy, NULL); gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(dd->main_textview), GTK_TEXT_WINDOW_WIDGET, wx, wy, &bx, &by); @@ -336,20 +348,36 @@ static gboolean textview_is_hyperlink_at_cursor(DictData *dd) static void textview_populate_popup_cb(GtkTextView *textview, GtkMenu *menu, DictData *dd) { - GtkWidget *search = gtk_image_menu_item_new_from_stock(GTK_STOCK_FIND, NULL); - GtkWidget *copy_link = gtk_image_menu_item_new_with_label(_("Copy Link")); + GtkWidget *box, *icon, *label; + + GtkWidget *search = gtk_menu_item_new (); + GtkWidget *copy_link = gtk_menu_item_new (); GtkWidget *sep = gtk_separator_menu_item_new(); - GtkWidget *copy_link_image = gtk_image_new_from_stock(GTK_STOCK_COPY, GTK_ICON_SIZE_MENU); gtk_widget_show(sep); gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), sep); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(copy_link), copy_link_image); - gtk_widget_show(copy_link); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + icon = gtk_image_new_from_icon_name ("gtk-copy", GTK_ICON_SIZE_MENU); + label = gtk_label_new (_("Copy Link")); + + gtk_container_add (GTK_CONTAINER (box), icon); + gtk_container_add (GTK_CONTAINER (box), label); + gtk_container_add (GTK_CONTAINER (copy_link), box); + + gtk_widget_show_all(copy_link); gtk_widget_set_sensitive(GTK_WIDGET(copy_link), textview_is_hyperlink_at_cursor(dd)); gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), copy_link); - gtk_widget_show(search); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + icon = gtk_image_new_from_icon_name ("gtk-find", GTK_ICON_SIZE_MENU); + label = gtk_label_new (_("Search")); + + gtk_container_add (GTK_CONTAINER (box), icon); + gtk_container_add (GTK_CONTAINER (box), label); + gtk_container_add (GTK_CONTAINER (search), box); + + gtk_widget_show_all(search); gtk_widget_set_sensitive(GTK_WIDGET(search), textview_is_text_at_cursor(dd)); gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), search); @@ -376,7 +404,6 @@ static gboolean textview_button_press_cb(GtkTextView *view, GdkEventButton *even } -#if GTK_CHECK_VERSION(2, 12, 0) static gboolean textview_query_tooltip_cb(GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, DictData *dd) { @@ -408,7 +435,6 @@ static gboolean textview_query_tooltip_cb(GtkWidget *widget, gint x, gint y, gbo } return FALSE; } -#endif static void textview_apply_or_remove_tags(GtkTextBuffer *buffer, const gchar *tag, @@ -522,7 +548,7 @@ static void combo_changed_cb(GtkComboBox *combo, DictData *dd) if (gtk_combo_box_get_active_iter(combo, &iter)) { - gchar *text = gtk_combo_box_get_active_text(combo); + gchar *text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo)); dict_search_word(dd, text); g_free(text); } @@ -577,7 +603,9 @@ static void update_search_button(DictData *dd, GtkWidget *box) if (button == NULL) { - button = gtk_button_new_from_stock(GTK_STOCK_FIND); + button = gtk_button_new_with_mnemonic (_("F_ind")); + gtk_button_set_image(GTK_BUTTON(button), + gtk_image_new_from_icon_name("gtk-find", GTK_ICON_SIZE_BUTTON)); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0); g_signal_connect(button, "clicked", G_CALLBACK(entry_button_clicked_cb), dd); @@ -590,7 +618,7 @@ static void update_search_button(DictData *dd, GtkWidget *box) { case DICTMODE_DICT: { - image = gtk_image_new_from_stock(GTK_STOCK_FIND, GTK_ICON_SIZE_BUTTON); + image = gtk_image_new_from_icon_name("gtk-find", GTK_ICON_SIZE_BUTTON); break; } case DICTMODE_WEB: @@ -600,7 +628,7 @@ static void update_search_button(DictData *dd, GtkWidget *box) } case DICTMODE_SPELL: { - image = gtk_image_new_from_stock(GTK_STOCK_SPELL_CHECK, GTK_ICON_SIZE_BUTTON); + image = gtk_image_new_from_icon_name("gtk-spell-check", GTK_ICON_SIZE_BUTTON); break; } default: @@ -646,12 +674,6 @@ static void search_mode_spell_toggled(GtkToggleButton *togglebutton, DictData *d } -const guint8 *dict_gui_get_icon_data(void) -{ - return dict_icon_data; -} - - static void speedreader_clicked_cb(GtkButton *button, DictData *dd) { GtkWidget *dialog = xfd_speed_reader_new(GTK_WINDOW(dd->window), dd); @@ -661,46 +683,95 @@ static void speedreader_clicked_cb(GtkButton *button, DictData *dd) static GtkWidget *create_file_menu(DictData *dd) { + GtkWidget *box, *icon, *label; GtkWidget *menubar, *file, *file_menu, *help, *help_menu, *menu_item; - GtkAccelGroup *accel_group; - accel_group = gtk_accel_group_new(); + GtkAccelGroup *accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(dd->window), accel_group); menubar = gtk_menu_bar_new(); + /* File Menu */ file = gtk_menu_item_new_with_mnemonic(_("_File")); file_menu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), file_menu); - menu_item = gtk_image_menu_item_new_with_mnemonic(_("Speed _Reader")); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), - gtk_image_new_from_stock(GTK_STOCK_JUSTIFY_CENTER, GTK_ICON_SIZE_MENU)); - gtk_widget_add_accelerator(menu_item, "activate", accel_group, - GDK_r, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); + /* Speed Reader */ + menu_item = gtk_menu_item_new(); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + icon = gtk_image_new_from_icon_name ("gtk-justify-center", GTK_ICON_SIZE_MENU); + label = gtk_accel_label_new (_("Speed _Reader")); + + gtk_label_set_use_underline (GTK_LABEL (label), TRUE); + gtk_label_set_xalign (GTK_LABEL (label), 0.0); + gtk_widget_add_accelerator (menu_item, "activate", accel_group, + GDK_KEY_r, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); + gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), menu_item); + + gtk_box_pack_start (GTK_BOX (box), icon, FALSE, FALSE , 0); + gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (menu_item), box); + g_signal_connect(menu_item, "activate", G_CALLBACK(speedreader_clicked_cb), dd); gtk_container_add(GTK_CONTAINER(file_menu), menu_item); + /* Separator */ gtk_container_add(GTK_CONTAINER(file_menu), gtk_separator_menu_item_new()); - dd->pref_menu_item = gtk_image_menu_item_new_from_stock("gtk-preferences", accel_group); - gtk_widget_add_accelerator(dd->pref_menu_item, "activate", accel_group, - GDK_p, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); + /* Preferences */ + dd->pref_menu_item = gtk_menu_item_new(); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + icon = gtk_image_new_from_icon_name ("gtk-preferences", GTK_ICON_SIZE_MENU); + label = gtk_accel_label_new (_("_Preferences")); + + gtk_label_set_use_underline (GTK_LABEL (label), TRUE); + gtk_label_set_xalign (GTK_LABEL (label), 0.0); + gtk_widget_add_accelerator (dd->pref_menu_item, "activate", accel_group, + GDK_KEY_p, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); + gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), dd->pref_menu_item); + + gtk_box_pack_start (GTK_BOX (box), icon, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (dd->pref_menu_item), box); gtk_container_add(GTK_CONTAINER(file_menu), dd->pref_menu_item); + /* Separator */ gtk_container_add(GTK_CONTAINER(file_menu), gtk_separator_menu_item_new()); - dd->close_menu_item = gtk_image_menu_item_new_from_stock( - (dd->is_plugin) ? "gtk-close" : "gtk-quit", accel_group); + /* Close */ + dd->close_menu_item = gtk_menu_item_new(); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + icon = gtk_image_new_from_icon_name ((dd->is_plugin) ? "gtk-close" : "gtk-quit", GTK_ICON_SIZE_MENU); + label = gtk_accel_label_new (_("_Quit")); + + gtk_label_set_use_underline (GTK_LABEL (label), TRUE); + gtk_label_set_xalign (GTK_LABEL (label), 0.0); + gtk_widget_add_accelerator (dd->close_menu_item, "activate", accel_group, + GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); + gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), dd->close_menu_item); + + gtk_box_pack_start (GTK_BOX (box), icon, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (dd->close_menu_item), box); gtk_container_add(GTK_CONTAINER(file_menu), dd->close_menu_item); + /* Help Menu*/ help = gtk_menu_item_new_with_mnemonic(_("_Help")); help_menu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(help), help_menu); - menu_item = gtk_image_menu_item_new_from_stock("gtk-about", accel_group); + /* About */ + menu_item = gtk_menu_item_new(); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + icon = gtk_image_new_from_icon_name ("gtk-about", GTK_ICON_SIZE_MENU); + label = gtk_label_new (_("About")); + + gtk_box_pack_start (GTK_BOX (box), icon, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (menu_item), box); + gtk_container_add(GTK_CONTAINER(help_menu), menu_item); g_signal_connect(menu_item, "activate", G_CALLBACK(dict_gui_about_dialog), dd); @@ -716,16 +787,16 @@ static GtkWidget *create_file_menu(DictData *dd) void dict_gui_finalize(DictData *dd) { if (hand_cursor) - gdk_cursor_unref(hand_cursor); + g_object_unref (hand_cursor); if (regular_cursor) - gdk_cursor_unref(regular_cursor); + g_object_unref (regular_cursor); } void dict_gui_create_main_window(DictData *dd) { GtkWidget *main_box, *entry_box, *label_box; - GtkWidget *sep, *align, *scrolledwindow_results; + GtkWidget *sep, *scrolledwindow_results; GdkPixbuf *icon; GtkWidget *method_chooser, *radio, *label, *button; GtkAccelGroup *accel_group = gtk_accel_group_new(); @@ -735,35 +806,36 @@ void dict_gui_create_main_window(DictData *dd) gtk_window_set_default_size(GTK_WINDOW(dd->window), 580, 360); gtk_widget_set_name(dd->window, "Xfce4Dict"); - icon = gdk_pixbuf_new_from_inline(-1, dict_icon_data, FALSE, NULL); + dict_get_resource(); + icon = gdk_pixbuf_new_from_resource("/org/xfce/dict/icon", NULL); gtk_window_set_icon(GTK_WINDOW(dd->window), icon); g_object_unref(icon); - main_box = gtk_vbox_new(FALSE, 0); + main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_widget_show(main_box); gtk_container_add(GTK_CONTAINER(dd->window), main_box); gtk_box_pack_start(GTK_BOX(main_box), create_file_menu(dd), FALSE, TRUE, 0); /* entry box (label, entry, buttons) */ - entry_box = gtk_hbox_new(FALSE, 5); + entry_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); gtk_widget_show(entry_box); gtk_container_set_border_width(GTK_CONTAINER(entry_box), 2); gtk_box_pack_start(GTK_BOX(main_box), entry_box, FALSE, TRUE, 5); - label_box = gtk_hbox_new(FALSE, 5); + label_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); gtk_widget_show(label_box); gtk_box_pack_start(GTK_BOX(entry_box), label_box, TRUE, TRUE, 5); - dd->main_combo = gtk_combo_box_entry_new_text(); + dd->main_combo = gtk_combo_box_text_new_with_entry(); gtk_widget_show(dd->main_combo); gtk_box_pack_start(GTK_BOX(label_box), dd->main_combo, TRUE, TRUE, 0); g_signal_connect(dd->main_combo, "changed", G_CALLBACK(combo_changed_cb), dd); dd->main_entry = gtk_bin_get_child(GTK_BIN(dd->main_combo)); - gtk_entry_set_text(GTK_ENTRY(dd->main_entry), _("Search term")); - gtk_entry_set_icon_from_stock(GTK_ENTRY(dd->main_entry), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_FIND); - gtk_entry_set_icon_from_stock(GTK_ENTRY(dd->main_entry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR); + gtk_entry_set_placeholder_text(GTK_ENTRY(dd->main_entry), _("Search term")); + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dd->main_entry), GTK_ENTRY_ICON_PRIMARY, "gtk-find"); + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dd->main_entry), GTK_ENTRY_ICON_SECONDARY, "gtk-clear"); g_signal_connect(dd->main_entry, "changed", G_CALLBACK(entry_changed_cb), dd); g_signal_connect(dd->main_entry, "activate", G_CALLBACK(entry_activate_cb), dd); g_signal_connect(dd->main_entry, "icon-release", G_CALLBACK(entry_icon_release_cb), dd); @@ -771,35 +843,31 @@ void dict_gui_create_main_window(DictData *dd) update_search_button(dd, entry_box); - /* just make some space */ - align = gtk_alignment_new(1, 0.5, 0, 0); - gtk_alignment_set_padding(GTK_ALIGNMENT(align), 0, 0, 10, 0); - gtk_widget_show(align); - gtk_container_add(GTK_CONTAINER(align), gtk_label_new("")); - gtk_box_pack_start(GTK_BOX(entry_box), align, FALSE, FALSE, 5); - - sep = gtk_vseparator_new(); + sep = gtk_separator_new(GTK_ORIENTATION_VERTICAL); gtk_widget_show(sep); gtk_box_pack_start(GTK_BOX(entry_box), sep, FALSE, FALSE, 2); button = gtk_button_new_with_mnemonic(_("Speed _Reader")); gtk_button_set_image(GTK_BUTTON(button), - gtk_image_new_from_stock(GTK_STOCK_JUSTIFY_CENTER, GTK_ICON_SIZE_MENU)); + gtk_image_new_from_icon_name("gtk-justify-center", GTK_ICON_SIZE_MENU)); g_signal_connect(button, "clicked", G_CALLBACK(speedreader_clicked_cb), dd); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(entry_box), button, FALSE, FALSE, 2); - sep = gtk_vseparator_new(); + sep = gtk_separator_new(GTK_ORIENTATION_VERTICAL); gtk_widget_show(sep); gtk_box_pack_start(GTK_BOX(entry_box), sep, FALSE, FALSE, 2); - dd->close_button = gtk_button_new_from_stock( - (dd->is_plugin) ? GTK_STOCK_CLOSE : GTK_STOCK_QUIT); + dd->close_button = gtk_button_new_with_mnemonic ((dd->is_plugin) ? + _("_Close") : _("_Quit")); + gtk_button_set_image(GTK_BUTTON(dd->close_button), + gtk_image_new_from_icon_name((dd->is_plugin) ? + "gtk-close" : "gtk-quit", GTK_ICON_SIZE_BUTTON)); gtk_widget_show(dd->close_button); gtk_box_pack_end(GTK_BOX(entry_box), dd->close_button, FALSE, FALSE, 0); /* search method chooser */ - method_chooser = gtk_hbox_new(FALSE, 0); + method_chooser = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show(method_chooser); gtk_box_pack_start(GTK_BOX(main_box), method_chooser, FALSE, FALSE, 0); @@ -873,8 +941,8 @@ void dict_gui_create_main_window(DictData *dd) /* support for links (cross-references) for dictd responses */ { - hand_cursor = gdk_cursor_new(GDK_HAND2); - regular_cursor = gdk_cursor_new(GDK_XTERM); + hand_cursor = gdk_cursor_new_from_name(gdk_display_get_default(), "pointer"); + regular_cursor = gdk_cursor_new_from_name(gdk_display_get_default(), "default"); g_signal_connect(dd->main_textview, "key-press-event", G_CALLBACK(textview_key_press_event), dd); @@ -897,10 +965,8 @@ void dict_gui_create_main_window(DictData *dd) G_CALLBACK(textview_populate_popup_cb), dd); } /* tooltips */ -#if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_has_tooltip(dd->main_textview, TRUE); g_signal_connect(dd->main_textview, "query-tooltip", G_CALLBACK(textview_query_tooltip_cb), dd); -#endif gtk_widget_show(dd->main_textview); gtk_container_add(GTK_CONTAINER(scrolledwindow_results), dd->main_textview); @@ -925,7 +991,7 @@ void dict_gui_create_main_window(DictData *dd) gtk_window_maximize(GTK_WINDOW(dd->window)); } /* quit on Escape */ - gtk_widget_add_accelerator(dd->close_button, "clicked", accel_group, GDK_Escape, 0, 0); + gtk_widget_add_accelerator(dd->close_button, "clicked", accel_group, GDK_KEY_Escape, 0, 0); gtk_window_add_accel_group(GTK_WINDOW(dd->window), accel_group); } @@ -938,39 +1004,26 @@ void dict_gui_show_main_window(DictData *dd) } -static void about_activate_link(GtkAboutDialog *about, const gchar *ref, gpointer data) -{ - gchar *cmd = g_strconcat("xdg-open ", ref, NULL); - g_spawn_command_line_async(cmd, NULL); - g_free(cmd); -} - - void dict_gui_about_dialog(GtkWidget *widget, DictData *dd) { const gchar *authors[]= { "Enrico Tröger <enrico@xfce.org>", - "Harald Judt <hjudt@xfce.org>", - NULL }; - const gchar *title = _("Xfce4 Dictionary"); - GdkPixbuf *logo = gdk_pixbuf_new_from_inline(-1, dict_icon_data, FALSE, NULL); + "Harald Judt <hjudt@xfce.org>", + "André Miranda <andre42m@gmail.com>", + NULL }; + + GdkPixbuf *logo = gdk_pixbuf_new_from_resource("/org/xfce/dict/icon", NULL); - gtk_about_dialog_set_email_hook(about_activate_link, NULL, NULL); - gtk_about_dialog_set_url_hook(about_activate_link, NULL, NULL); gtk_show_about_dialog(GTK_WINDOW(dd->window), "destroy-with-parent", TRUE, "authors", authors, "comments", _("A client program to query different dictionaries."), - "copyright", _("Copyright \302\251 2006-2015 Xfce Development Team"), + "copyright", _("Copyright \302\251 2006-2016 Xfce Development Team"), "website", "http://goodies.xfce.org/projects/applications/xfce4-dict", "logo", logo, "translator-credits", _("translator-credits"), "license", XFCE_LICENSE_GPL, "version", PACKAGE_VERSION, -#if GTK_CHECK_VERSION(2,11,0) - "program-name", title, -#else - "name", title, -#endif + "program-name", _("Xfce4 Dictionary"), NULL); if (logo != NULL) @@ -983,7 +1036,7 @@ void dict_gui_query_geometry(DictData *dd) gtk_window_get_position(GTK_WINDOW(dd->window), &dd->geometry[0], &dd->geometry[1]); gtk_window_get_size(GTK_WINDOW(dd->window), &dd->geometry[2], &dd->geometry[3]); - if (gdk_window_get_state(dd->window->window) & GDK_WINDOW_STATE_MAXIMIZED) + if (gdk_window_get_state(gtk_widget_get_window(dd->window)) & GDK_WINDOW_STATE_MAXIMIZED) dd->geometry[4] = 1; else dd->geometry[4] = 0; diff --git a/lib/gui.h b/lib/gui.h index 556699c7598772e5172c45e619e1ccf2c75a676e..e6305b5cd79f9c2afd0babd87868bec148a02742 100644 --- a/lib/gui.h +++ b/lib/gui.h @@ -28,7 +28,6 @@ void dict_gui_set_panel_entry_text(DictData *dd, const gchar *text); void dict_gui_show_main_window(DictData *dd); void dict_gui_query_geometry(DictData *dd); void dict_gui_finalize(DictData *dd); -const guint8 *dict_gui_get_icon_data(void); void dict_gui_textview_apply_tag_to_word(GtkTextBuffer *buffer, const gchar *word, GtkTextIter *pos, const gchar *first_tag, diff --git a/lib/inline-icon.h b/lib/inline-icon.h deleted file mode 100644 index 96a61415511c16ef3768f5d0667d1f31a3a4183f..0000000000000000000000000000000000000000 --- a/lib/inline-icon.h +++ /dev/null @@ -1,420 +0,0 @@ -/* GdkPixbuf RGBA C-Source image dump */ - -#ifdef __SUNPRO_C -#pragma align 4 (dict_icon_data) -#endif -#ifdef __GNUC__ -static const guint8 dict_icon_data[] __attribute__ ((__aligned__ (4))) = -#else -static const guint8 dict_icon_data[] = -#endif -{ "" - /* Pixbuf magic (0x47646b50) */ - "GdkP" - /* length: header (24) + pixel_data (9216) */ - "\0\0$\30" - /* pixdata_type (0x1010002) */ - "\1\1\0\2" - /* rowstride (192) */ - "\0\0\0\300" - /* width (48) */ - "\0\0\0""0" - /* height (48) */ - "\0\0\0""0" - /* pixel_data: */ - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\252\252" - "\3\312\312\3125\313\313\313l\317\317\317\243\320\320\320\324\320\320" - "\320\351\322\322\322\367\324\324\324\367\323\323\323\361\321\321\321" - "\337\317\317\317\241\313\313\313S\377\377\377\2\306\306\306\11\315\315" - "\315\\\320\320\320\251\321\321\321\341\323\323\323\356\324\324\324\364" - "\322\322\322\366\317\317\317\351\313\313\313\330\311\311\311\257\306" - "\306\306y\306\306\306G\304\304\304\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\317\317\317\20\315" - "\315\315`\317\317\317\300\315\315\315\366\326\326\326\362\350\350\350" - "\371\363\363\363\377\372\372\372\377\374\374\374\377\373\373\372\377" - "\367\370\367\377\364\365\363\377\361\362\360\377\351\352\350\377\333" - "\333\332\370\312\307\307\360y\0\0\377\330\331\327\370\352\353\352\377" - "\366\366\366\377\370\370\370\377\367\367\367\377\367\367\367\377\366" - "\366\366\377\364\364\364\377\355\355\355\377\341\341\341\374\320\320" - "\320\361\300\300\300\370\300\300\300\330\276\276\276\205\274\274\274" - ".\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310\310\310\16\313\313\313]\317" - "\317\317\300\316\316\316\370\333\333\333\364\362\362\362\377\375\375" - "\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\375\375\375\377\366\366\365\377\357\360\355\377\346\347\344\377" - "\335\337\333\377\334\335\331\377\345\346\344\377\344\345\343\377y\0\0" - "\377\326\315\314\377\337\340\336\377\352\353\352\377\360\360\360\377" - "\356\356\356\377\355\355\355\377\354\354\354\377\353\353\353\377\355" - "\355\355\377\360\360\360\377\364\364\364\377\363\363\363\377\345\345" - "\345\377\320\320\320\371\274\274\274\363\271\271\271\343\266\266\266" - "t\270\270\270\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\314\314\314\5\314\314\314\377\326\326\326\365\352" - "\352\352\377\375\375\375\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\375\375\375\377\366\366\365\377\356\357\354\377\346\347\344\377" - "\335\337\333\377\324\326\321\377\311\314\306\377\313\315\307\377z\1\1" - "\377\256\223\220\377\331\332\327\377\352\353\352\377\357\357\357\377" - "\356\356\356\377\355\355\355\377\353\353\353\377\352\352\352\377\351" - "\351\351\377\350\350\350\377\346\346\346\377\351\351\351\377\357\357" - "\357\377\365\365\365\377\356\356\356\377\330\330\330\377\303\303\303" - "\365\261\261\261\377\231\231\231\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0""333\5Q<N\377\311\310\311\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\375\375\374\377\366\366\365\377\356\357\354\377\346\347\344" - "\377\335\337\333\377\324\326\321\377\311\314\306\377\277\302\273\377" - "}\4\4\377\230SR\377\331\333\330\377\353\353\352\377\357\357\357\377\356" - "\356\356\377\355\355\355\377\353\353\353\377\352\352\352\377\351\351" - "\351\377\347\347\347\377\346\346\346\377\345\345\345\377\343\343\343" - "\377\346\346\346\377\363\363\363\377\343\343\343\377\343\343\343\377" - "\254\253\254\377M8J\377333\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0;';'iZh\365\320\316\320\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\375\374" - "\377\364\365\364\377\355\357\354\377\345\347\344\377\334\336\332\377" - "\324\326\321\377\311\314\306\377\277\302\273\377\201\14\14\377\200\7" - "\7\377\332\333\330\377\352\352\351\377\357\357\357\377\356\356\356\377" - "\354\354\354\377\353\353\353\377\352\352\352\377\350\350\350\377\347" - "\347\347\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343" - "\343\377\364\364\364\377\344\344\344\377\343\343\343\377\261\257\261" - "\377`O_\365;';'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<%<L\201" - "r\200\366\330\327\330\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\374\374\373\377\364" - "\365\364\377\355\357\354\377\344\346\343\377\334\336\332\377\324\326" - "\321\377\311\314\306\377\277\302\273\377\221ea\377\202\11\11\377\321" - "\307\305\377\352\352\351\377\357\357\357\377\355\355\355\377\354\354" - "\354\377\353\353\353\377\352\352\352\377\350\350\350\377\347\347\347" - "\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343\343\377" - "\360\360\360\377\350\350\350\377\343\343\343\377\266\265\267\377qbp\366" - "<%<L\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77&:r\224\212\224" - "\374\345\345\345\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\373\374\373\377\364\365" - "\363\377\354\355\353\377\344\346\343\377\334\335\331\377\323\325\320" - "\377\310\313\305\377\277\301\273\377\232\225\221\377\205\14\14\377\245" - "TS\377\352\353\352\377\356\356\356\377\355\355\355\377\354\354\354\377" - "\352\352\352\377\351\351\351\377\350\350\350\377\347\347\347\377\345" - "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\355\355" - "\355\377\354\354\354\377\343\343\343\377\302\302\302\377|q{\374\77&:" - "r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77'<\242\252\244\253" - "\377\354\354\354\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\373\374\373\377\364\365" - "\363\377\354\355\353\377\344\346\343\377\334\335\331\377\322\324\317" - "\377\310\313\305\377\277\301\273\377\234\235\231\377\240SR\377\210\17" - "\17\377\314\247\247\377\356\356\356\377\355\355\355\377\354\354\354\377" - "\352\352\352\377\351\351\351\377\350\350\350\377\346\346\346\377\345" - "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\351\351" - "\351\377\360\360\360\377\343\343\343\377\312\312\312\377\213\204\213" - "\377\77'<\242\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@'<\317" - "\275\271\275\377\362\362\362\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\374\373" - "\377\364\365\363\377\354\355\353\377\344\346\343\377\334\335\331\377" - "\322\324\317\377\310\313\305\377\277\301\273\377\234\235\231\377\273" - "\262\256\377\213\21\21\377\215\26\26\377\342\323\323\377\355\355\355" - "\377\353\353\353\377\352\352\352\377\351\351\351\377\347\347\347\377" - "\346\346\346\377\345\345\345\377\344\344\344\377\343\343\343\377\343" - "\343\343\377\345\345\345\377\364\364\364\377\343\343\343\377\322\322" - "\322\377\226\222\226\377@'<\317\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0>'<\356\304\302\304\377\371\371\371\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345\342\377" - "\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273\377\234" - "\237\231\377\300\302\276\377\275\216\214\377\216\24\24\377\24077\377" - "\344\333\333\377\353\353\353\377\352\352\352\377\351\351\351\377\347" - "\347\347\377\346\346\346\377\345\345\345\377\343\343\343\377\343\343" - "\343\377\343\343\343\377\343\343\343\377\363\363\363\377\345\345\345" - "\377\333\333\333\377\232\231\233\377>'<\356\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0@+@\14E.B\372\303\303\303\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" - "\376\376\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345" - "\342\377\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273" - "\377\235\237\232\377\300\302\276\377\332\332\330\377\251NN\377\227!!" - "\377\247BB\377\347\341\341\377\352\352\352\377\350\350\350\377\347\347" - "\347\377\346\346\346\377\344\344\344\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\360\360\360\377\351\351\351\377" - "\342\342\342\377\234\233\234\377D-A\372@+@\14\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0@%:0\\HZ\363\300\277\300\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376" - "\376\377\372\373\372\377\364\365\363\377\354\355\353\377\344\345\342" - "\377\333\335\331\377\321\324\317\377\310\313\305\377\276\301\273\377" - "\234\236\231\377\300\302\276\377\333\334\331\377\345\335\334\377\242" - "66\377\24522\377\254NN\377\350\345\345\377\350\350\350\377\347\347\347" - "\377\345\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377" - "\343\343\343\377\343\343\343\377\354\354\354\377\355\355\355\377\343" - "\343\343\377\237\236\237\377VBT\363@%:0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0>&;Wn^n\366\304\302\304\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377" - "\372\372\372\377\363\364\362\377\354\355\352\377\343\345\342\377\333" - "\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377\235\237" - "\232\377\301\303\277\377\333\334\331\377\351\352\351\377\340\316\316" - "\377\240--\377\255<<\377\265``\377\347\345\345\377\346\346\346\377\345" - "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\343\343" - "\343\377\343\343\343\377\350\350\350\377\361\361\361\377\343\343\343" - "\377\246\244\246\377dTd\366>&;W\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77';" - "}\177q\177\375\317\316\317\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377" - "\371\371\371\377\363\364\362\377\354\355\352\377\342\344\341\377\333" - "\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377\235\237" - "\233\377\301\303\277\377\332\333\331\377\351\352\351\377\355\355\355" - "\377\326\266\266\377\24411\377\260@@\377\275uu\377\346\346\346\377\345" - "\345\345\377\344\344\344\377\343\343\343\377\343\343\343\377\343\343" - "\343\377\343\343\343\377\344\344\344\377\364\364\364\377\343\343\343" - "\377\263\262\263\377ses\375\77';}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77" - "(<\256\217\205\220\377\334\334\334\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376" - "\376\377\371\371\371\377\363\364\362\377\354\355\352\377\342\344\341" - "\377\333\335\330\377\321\324\316\377\310\312\305\377\276\301\272\377" - "\235\237\233\377\301\302\277\377\332\334\331\377\352\352\351\377\355" - "\355\355\377\353\353\353\377\311\222\222\377\271KK\377\260@@\377\316" - "\244\244\377\345\345\345\377\343\343\343\377\343\343\343\377\343\343" - "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\363\363\363" - "\377\346\346\346\377\301\301\301\377\177u\200\377\77(<\256\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\77)=\326\237\231\240\377\344\344\344\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\375\375\375\377\371\371\371\377\363\363\362\377\352" - "\353\351\377\342\344\340\377\332\335\330\377\321\323\316\377\310\312" - "\304\377\276\301\272\377\236\240\233\377\301\303\277\377\333\334\331" - "\377\352\352\351\377\354\354\354\377\353\353\353\377\352\351\351\377" - "\262QQ\377\316aa\377\253<<\377\337\325\325\377\343\343\343\377\343\343" - "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\357\357\357\377\352\352\352\377\312\312\312\377\216\210\217\377" - "\77)=\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77(<\365\250\245\251\377\355" - "\355\355\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\376\376\376\377\375\375\375\377\371\371\371\377" - "\362\362\361\377\352\353\351\377\342\344\340\377\332\335\330\377\321" - "\323\316\377\310\312\304\377\276\301\272\377\237\241\234\377\302\303" - "\277\377\333\334\331\377\351\351\351\377\354\354\354\377\353\353\353" - "\377\351\351\351\377\335\312\312\377\255<<\377\310XX\377\300tt\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343" - "\343\377\343\343\343\377\353\353\353\377\355\355\355\377\323\323\323" - "\377\227\224\230\377\77(<\365\0\0\0\0\0\0\0\0\0\0\0\0=$=\25D+A\370\252" - "\250\252\377\367\367\367\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\376\376\376\377\375\375\375\377" - "\370\370\367\377\361\362\361\377\352\353\351\377\342\344\340\377\331" - "\334\327\377\321\323\316\377\310\312\304\377\276\301\272\377\237\241" - "\235\377\302\303\277\377\332\333\331\377\351\352\351\377\354\354\354" - "\377\352\352\352\377\351\351\351\377\350\350\350\377\270\\\\\377\313" - "UU\377\255;;\377\335\323\323\377\343\343\343\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\347\347\347\377\361\361" - "\361\377\335\335\335\377\233\231\233\377D+A\370=$=\25\0\0\0\0\0\0\0\0" - "='=;N9N\361\250\247\250\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\377\375" - "\375\375\377\370\370\367\377\361\362\361\377\352\353\351\377\342\344" - "\340\377\331\334\327\377\321\323\316\377\307\312\304\377\275\300\272" - "\377\237\241\235\377\302\304\300\377\333\334\331\377\351\352\351\377" - "\354\354\354\377\352\352\352\377\351\351\351\377\350\350\350\377\316" - "\236\236\377\274FF\377\274EE\377\313\227\227\377\343\343\343\377\343" - "\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\344\344" - "\344\377\364\364\364\377\343\343\343\377\233\233\233\377M8M\361='=;\0" - "\0\0\0\0\0\0\0=%:`_M_\366\252\251\252\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" - "\376\376\377\374\374\374\377\370\370\367\377\361\362\361\377\351\352" - "\350\377\342\344\340\377\331\334\327\377\321\323\316\377\307\312\304" - "\377\275\300\272\377\240\242\235\377\303\304\301\377\333\334\331\377" - "\351\352\351\377\353\353\353\377\352\352\352\377\351\351\351\377\347" - "\347\347\377\334\306\306\377\262\77\77\377\302BB\377\273__\377\343\343" - "\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\362\362\362\377\347\347\347\377\240\237\240\377" - "]K]\366=%:`\0\0\0\0\0\0\0\0\77%<\211m\\m\376\261\260\262\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\375\375\375\377\374\374\374\377\370\370\367\377\360" - "\361\357\377\351\352\347\377\342\344\340\377\331\333\327\377\320\323" - "\316\377\307\312\304\377\275\300\271\377\241\243\236\377\303\304\301" - "\377\333\334\332\377\351\351\350\377\353\353\353\377\352\352\352\377" - "\351\351\351\377\347\347\347\377\343\336\336\377\25788\377\30299\377" - "\264CC\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\356\356\356\377\352\352\352\377" - "\250\246\250\377kZk\376\77%<\211\0\0\0\0\0\0\0\0A'>\271xly\377\301\300" - "\301\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\376\376\376\377\376\376\376\377\375\375\375\377\372" - "\372\372\377\367\367\366\377\362\362\361\377\353\355\352\377\343\344" - "\341\377\323\326\321\377\307\312\304\377\275\300\271\377\241\243\236" - "\377\303\305\301\377\334\335\334\377\357\357\357\377\362\362\362\377" - "\362\362\362\377\362\362\362\377\361\361\361\377\360\360\360\377\260" - "66\377\272++\377\26199\377\344\344\344\377\343\343\343\377\343\343\343" - "\377\343\343\343\377\343\343\343\377\343\343\343\377\352\352\352\377" - "\356\356\356\377\265\264\265\377wkx\377A'>\271\0\0\0\0\0\0\0\0@'<\340" - "\206|\207\377\322\322\322\377\377\377\377\377\377\377\377\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" - "\377\376\376\376\377\366\366\366\377\353\353\353\377\341\341\341\377" - "\332\332\332\377\322\322\322\377\321\321\321\377\333\333\332\377\341" - "\342\341\377\350\350\347\377\355\356\354\377\342\343\340\377\304\307" - "\300\377\254\255\251\377\340\341\337\377\360\361\360\377\350\350\350" - "\377\336\336\336\377\325\325\325\377\313\313\313\377\314\314\314\377" - "\320\313\313\377\26177\377\263\34\34\377\26066\377\364\364\364\377\362" - "\362\362\377\356\356\356\377\351\351\351\377\344\344\344\377\343\343" - "\343\377\347\347\347\377\362\362\362\377\303\303\303\377\206|\206\377" - "@'<\340\0\0\0\0\0\0\0\1@)>\372\223\215\224\377\340\340\340\377\377\377" - "\377\377\377\377\377\377\377\377\377\377\372\372\372\377\353\353\353" - "\377\317\317\317\377\261\261\260\377\236\236\236\377\240\240\240\377" - "\241\242\240\377\240\242\237\377\240\242\236\377\242\244\240\377\242" - "\244\237\377\241\243\237\377\241\242\237\377\237\237\236\377\241\241" - "\241\377\315\315\313\377\351\352\350\377\337\337\335\377\306\307\306" - "\377\241\241\241\377\237\237\236\377\242\242\240\377\243\245\241\377" - "\245\247\243\377\245\247\243\377\247\206\204\377\25755\377\254\20\20" - "\377\26098\377\235\236\235\377\256\256\255\377\310\310\310\377\342\342" - "\342\377\360\360\360\377\360\360\360\377\352\352\352\377\365\365\365" - "\377\316\316\316\377\222\214\222\377@)>\372\0\0\0\1>#>\35D-C\365\231" - "\227\232\377\356\356\356\377\367\367\367\377\336\336\336\377\270\270" - "\270\377\241\241\241\377\235\235\233\377\237\240\233\377\250\254\244" - "\377\260\264\253\377\255\260\247\377\251\254\244\377\245\251\240\377" - "\244\251\237\377\244\250\237\377\245\251\240\377\247\253\242\377\252" - "\256\246\377\257\264\253\377\255\261\250\377\234\235\232\377\251\251" - "\250\377\243\243\242\377\234\235\233\377\257\261\253\377\263\267\256" - "\377\261\265\255\377\262\264\255\377\262\264\255\377\263\265\257\377" - "\261ro\377\252\37\37\377\246\12\12\377\261DC\377\270\273\264\377\262" - "\264\256\377\245\246\242\377\236\236\235\377\240\240\240\377\266\266" - "\266\377\330\330\330\377\357\357\357\377\333\333\333\377\230\225\230" - "\377D-C\365>#>\35@&<DK5I\361\233\233\233\377\246\246\246\377\242\243" - "\242\377\231\231\226\377\241\244\236\377\257\263\252\377\255\261\250" - "\377\245\251\237\377\237\243\230\377\232\236\224\377\232\237\224\377" - "\233\240\225\377\235\241\227\377\236\242\230\377\237\243\231\377\240" - "\245\233\377\242\246\234\377\243\247\235\377\245\251\241\377\256\261" - "\251\377\264\267\257\377\246\250\243\377\246\250\242\377\264\270\260" - "\377\262\264\255\377\256\261\251\377\256\261\251\377\257\263\253\377" - "\260\264\254\377\262\265\255\377\260EC\377\253\"\"\377\252\36\36\377" - "\260TR\377\270\273\264\377\271\274\265\377\272\275\266\377\272\275\266" - "\377\272\275\266\377\253\257\251\377\235\236\233\377\241\242\241\377" - "\245\245\245\377\233\233\233\377K5I\361@&<D\77&<jZGZ\367\222\223\221" - "\377\233\240\230\377\262\266\255\377\263\266\256\377\254\260\250\377" - "\245\251\237\377\242\247\234\377\245\251\240\377\247\253\241\377\251" - "\254\243\377\252\256\245\377\253\257\246\377\254\260\246\377\255\260" - "\250\377\253\257\246\377\251\255\244\377\247\253\242\377\255\262\251" - "\377\261\264\254\377\243\246\237\377\223\223\220\377\216\216\213\377" - "\215\215\213\377\223\223\220\377\243\246\240\377\262\266\257\377\264" - "\267\257\377\262\265\255\377\264\267\260\377\265\264\254\377\26066\377" - "\261DC\377\26066\377\262[Y\377\271\275\265\377\273\276\267\377\272\275" - "\266\377\272\275\266\377\272\275\266\377\272\275\266\377\272\275\266" - "\377\272\275\266\377\254\256\251\377\222\223\221\377ZGZ\367\77&<j>%;" - "\227gYg\377\207\210\204\377\246\252\241\377\262\266\255\377\252\255\245" - "\377\250\253\243\377\245\251\242\377\242\246\236\377\240\244\234\377" - "\236\241\232\377\232\234\226\377\227\231\224\377\227\231\223\377\225" - "\226\222\377\226\226\222\377\232\234\226\377\242\245\236\377\257\262" - "\253\377\237\243\235\377\210\211\206\377wov\377bQd\377YB\\\377YB\\\377" - "bQd\377wov\377\207\211\205\377\240\244\236\377\260\263\255\377\244\247" - "\240\377\235\232\224\377\231\222\217\377\227\230\224\377\236\202~\377" - "\243sp\377\233\235\230\377\241\243\236\377\244\247\241\377\250\252\245" - "\377\253\256\247\377\256\262\253\377\261\264\256\377\264\267\257\377" - "\267\271\263\377\220\221\216\377gYg\377>%;\227@'=\304sis\377\210\212" - "\205\377\206\207\203\377\204\204\202\377\203\202\200\377\201\177\177" - "\377~y{\377ysx\377tks\377nbo\377j]k\377gYi\377gYi\377gYi\377gYi\377i" - "\\k\377sjs\377\207\210\204\377\203\202\201\377hSk\377ZA^\377S9W\377R" - "8V\377R8V\377S9W\377ZA^\377hSk\377\203\202\202\377\210\211\205\377tk" - "t\377j\\k\377gYi\377gYi\377gYi\377gYi\377i\\k\377mam\377tjs\377ysx\377" - "\177y}\377\203\200\200\377\205\203\202\377\206\206\204\377\207\210\204" - "\377\210\212\205\377sis\377@'=\304\77(<\350fPi\377iSm\377hQk\377hQk\377" - "hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377" - "hQk\377hQk\377hQk\377iTm\377O9M\372G1E\373^G_\377hQk\377fOi\377fOi\377" - "hQk\377^G_\377G1E\373N8M\372iTm\377hQk\377hQk\377hQk\377hQk\377hQk\377" - "hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377hQk\377" - "iSm\377fPi\377\77(<\350>&;\377\77'<\377@(=\377@(=\377@(=\377@(=\377@" - "(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377" - "@(=\377@(=\377@(=\377B-\77\316F8D\226A,\77\334A)=\365D,A\370D,A\370A" - ")=\365A,\77\334F8D\226B,A\315@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377" - "@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377@(=\377" - "@(=\377\77'<\377>&;\377\0\0\0\0\0\0\0\0\0\0\0\0UUU\3```\10NNN\15UUU\22" - "Q]Q\26XXN\32RZR\37WWP#UUU'SYS+WWQ/WWR2UUU6UUU9UUU<VVR>TXT@UYQBTXTCVV" - "SDRRNKRRNKVVSDTXTCUYQBTXT@VVR>UUU<UUU9UUU6WWR2WWQ/SYS+UUU'WWP#RZR\37" - "XXN\32Q]Q\26UUU\22NNN\15```\10UUU\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1fff\5MMM\12[[[\16UUU\22U" - "UU\25R\\R\31R[R\34RZR\37SZS\"SZS%SYS(UUU*WWQ,SYS.WWQ/UUU0SXS1SXS1SXS" - "1SXS1UUU0WWQ/SYS.WWQ,UUU*SYS(SZS%SZS\"RZR\37R[R\34R\\R\31UUU\25UUU\22" - "[[[\16MMM\12fff\5\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\200\200\200\2fff\5UUU\11UUU\14UUU\17ZZZ\21YYY\24Q]Q\26UUU\30R" - "\\R\31UUU\33R[R\34XXO\35XXO\35UUU\36UUU\36XXO\35XXO\35R[R\34UUU\33R\\" - "R\31UUU\30Q]Q\26YYY\24ZZZ\21UUU\17UUU\14UUU\11fff\5\200\200\200\2\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\200\200" - "\200\2@@@\4fff\5UUU\6mmm\7```\10UUU\11MMM\12MMM\12UUU\11```\10mmm\7U" - "UU\6fff\5@@@\4\200\200\200\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}; - - diff --git a/lib/libdict.h b/lib/libdict.h index 98ead5b60430c9a2a28c8756551424afa1211ed0..4435da093b9f621c89cc1f7bc06dbbafe1e34d78 100644 --- a/lib/libdict.h +++ b/lib/libdict.h @@ -24,6 +24,7 @@ #include "dictd.h" #include "prefs.h" #include "gui.h" +#include "dbus.h" #endif diff --git a/lib/prefs.c b/lib/prefs.c index d321bba95ed8d955c98305e50c57e3e9a08bca51..3f10a1a1e77cc6e220fda8f11b1da4e638e98a90 100644 --- a/lib/prefs.c +++ b/lib/prefs.c @@ -92,8 +92,8 @@ void dict_prefs_dialog_response(GtkWidget *dlg, gint response, DictData *dd) /* check some values before actually saving the settings in case we need to return to * the dialog */ - dictionary = gtk_combo_box_get_active_text( - GTK_COMBO_BOX(g_object_get_data(G_OBJECT(dlg), "dict_combo"))); + dictionary = gtk_combo_box_text_get_active_text( + GTK_COMBO_BOX_TEXT(g_object_get_data(G_OBJECT(dlg), "dict_combo"))); if (! NZV(dictionary) || dictionary[0] == '-') { dict_show_msgbox(dd, GTK_MESSAGE_ERROR, _("You have chosen an invalid dictionary.")); @@ -122,8 +122,8 @@ void dict_prefs_dialog_response(GtkWidget *dlg, gint response, DictData *dd) gtk_widget_set_sensitive(dd->radio_button_web, NZV(dd->web_url)); /* MODE SPELL */ - dictionary = gtk_combo_box_get_active_text( - GTK_COMBO_BOX(g_object_get_data(G_OBJECT(dlg), "spell_combo"))); + dictionary = gtk_combo_box_text_get_active_text( + GTK_COMBO_BOX_TEXT(g_object_get_data(G_OBJECT(dlg), "spell_combo"))); if (NZV(dictionary)) { g_free(dd->spell_dictionary); @@ -168,11 +168,11 @@ static GtkWidget *create_web_dicts_table(GtkWidget *entry) { gint i; gint offset; - GtkWidget *table, *button; + GtkWidget *grid, *button; - table = gtk_table_new(4, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 2); - gtk_table_set_col_spacings(GTK_TABLE(table), 2); + grid = gtk_grid_new(); + gtk_grid_set_row_spacing(GTK_GRID(grid), 4); + gtk_grid_set_column_spacing(GTK_GRID(grid), 4); for (i = 0; web_dicts[i].label != NULL; i++) { @@ -182,13 +182,11 @@ static GtkWidget *create_web_dicts_table(GtkWidget *entry) g_object_set_data(G_OBJECT(button), "web_entry", entry); gtk_widget_show(button); - gtk_table_attach(GTK_TABLE(table), - button, offset, 1 + offset, i - offset, i + 1 - offset, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), button, offset, i - offset, 1, 1); + gtk_widget_set_hexpand(button, TRUE); } - return table; + return grid; } @@ -205,9 +203,9 @@ const gchar *dict_prefs_get_web_url_label(DictData *dd) } -static void color_set_cb(GtkColorButton *widget, GdkColor *color) +static void color_set_cb(GtkColorChooser *widget, GdkRGBA *color) { - gtk_color_button_get_color(widget, color); + gtk_color_chooser_get_rgba(widget, color); } @@ -225,11 +223,11 @@ static gboolean spell_entry_focus_cb(GtkEntry *entry, GdkEventFocus *ev, GtkWidg if (path != NULL) { - gtk_image_set_from_stock(GTK_IMAGE(icon), GTK_STOCK_YES, GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(icon), "gtk-yes", GTK_ICON_SIZE_BUTTON); g_free(path); } else - gtk_image_set_from_stock(GTK_IMAGE(icon), GTK_STOCK_STOP, GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(icon), "gtk-stop", GTK_ICON_SIZE_BUTTON); return FALSE; } @@ -266,8 +264,8 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) dialog = xfce_titled_dialog_new_with_buttons( _("Dictionary"), GTK_WINDOW(parent), - GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, - GTK_STOCK_CLOSE, GTK_RESPONSE_OK, + GTK_DIALOG_DESTROY_WITH_PARENT, + "gtk-close", GTK_RESPONSE_OK, NULL); gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); @@ -277,10 +275,10 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) g_signal_connect(dialog, "response", G_CALLBACK(dict_prefs_dialog_response), dd); notebook = gtk_notebook_new(); - GTK_WIDGET_UNSET_FLAGS(notebook, GTK_CAN_FOCUS); + gtk_widget_set_can_focus (notebook, FALSE); gtk_widget_show(notebook); g_object_set_data(G_OBJECT(dialog), "notebook", notebook); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), notebook, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(notebook), 5); /* @@ -288,13 +286,13 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) */ #define PAGE_GENERAL /* only for navigation in Geany's symbol list ;-) */ { - GtkWidget *radio_button, *label, *table, *label4; + GtkWidget *radio_button, *label, *grid, *label4; GtkWidget *color_link, *color_phon, *color_success, *color_error; GSList *search_method; - notebook_vbox = gtk_vbox_new(FALSE, 2); + notebook_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2); gtk_widget_show(notebook_vbox); - inner_vbox = gtk_vbox_new(FALSE, 5); + inner_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); gtk_container_set_border_width(GTK_CONTAINER(inner_vbox), 5); gtk_widget_show(inner_vbox); gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), @@ -302,7 +300,6 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) label = gtk_label_new(_("<b>Default search method:</b>")); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(inner_vbox), label, FALSE, FALSE, 0); @@ -344,7 +341,7 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) label = gtk_label_new(_("<b>Colors:</b>")); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 1); + gtk_widget_set_valign(label, GTK_ALIGN_END); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(inner_vbox), label, FALSE, FALSE, 5); @@ -352,58 +349,49 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) label2 = gtk_label_new(_("Phonetics:")); label3 = gtk_label_new(_("Spelled correctly:")); label4 = gtk_label_new(_("Spelled incorrectly:")); - color_link = gtk_color_button_new_with_color(dd->color_link); - color_phon = gtk_color_button_new_with_color(dd->color_phonetic); - color_error = gtk_color_button_new_with_color(dd->color_incorrect); - color_success = gtk_color_button_new_with_color(dd->color_correct); + color_link = gtk_color_button_new_with_rgba(dd->color_link); + color_phon = gtk_color_button_new_with_rgba(dd->color_phonetic); + color_error = gtk_color_button_new_with_rgba(dd->color_incorrect); + color_success = gtk_color_button_new_with_rgba(dd->color_correct); g_signal_connect(color_link, "color-set", G_CALLBACK(color_set_cb), dd->color_link); g_signal_connect(color_phon, "color-set", G_CALLBACK(color_set_cb), dd->color_phonetic); g_signal_connect(color_error, "color-set", G_CALLBACK(color_set_cb), dd->color_incorrect); g_signal_connect(color_success, "color-set", G_CALLBACK(color_set_cb), dd->color_correct); - table = gtk_table_new(2, 4, FALSE); - gtk_widget_show(table); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 5); + grid = gtk_grid_new(); + gtk_grid_set_row_spacing(GTK_GRID(grid), 8); + gtk_grid_set_column_spacing(GTK_GRID(grid), 8); - gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 5); - gtk_misc_set_alignment(GTK_MISC(label1), 1, 0); + gtk_grid_attach(GTK_GRID(grid), label1, 0, 0, 1, 1); + gtk_widget_set_valign (label1, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label1, GTK_ALIGN_END); - gtk_table_attach(GTK_TABLE(table), color_link, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), color_link, 1, 0, 1, 1); + gtk_widget_set_hexpand(color_link, TRUE); - gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 0); - gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); + gtk_grid_attach(GTK_GRID(grid), label2, 0, 1, 1, 1); + gtk_widget_set_valign (label2, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label2, GTK_ALIGN_END); - gtk_table_attach(GTK_TABLE(table), color_phon, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), color_phon, 1, 1, 1, 1); + gtk_widget_set_hexpand(color_phon, TRUE); - gtk_table_attach(GTK_TABLE(table), label3, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 5); - gtk_misc_set_alignment(GTK_MISC(label3), 1, 0); + gtk_grid_attach(GTK_GRID(grid), label3, 2, 0, 1, 1); + gtk_widget_set_valign (label3, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label3, GTK_ALIGN_END); - gtk_table_attach(GTK_TABLE(table), color_success, 3, 4, 0, 1, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), color_success, 3, 0, 1, 1); + gtk_widget_set_hexpand(color_success, TRUE); - gtk_table_attach(GTK_TABLE(table), label4, 2, 3, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 0); - gtk_misc_set_alignment(GTK_MISC(label4), 1, 0); + gtk_grid_attach(GTK_GRID(grid), label4, 2, 1, 1, 1); + gtk_widget_set_valign (label4, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label4, GTK_ALIGN_END); - gtk_table_attach(GTK_TABLE(table), color_error, 3, 4, 1, 2, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), color_error, 3, 1, 1, 1); + gtk_widget_set_hexpand(color_error, TRUE); - gtk_widget_show_all(table); - gtk_box_pack_start(GTK_BOX(inner_vbox), table, FALSE, FALSE, 0); + gtk_widget_show_all(grid); + gtk_box_pack_start(GTK_BOX(inner_vbox), grid, FALSE, FALSE, 0); /* show panel entry check box */ @@ -413,7 +401,7 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) label = gtk_label_new(_("<b>Panel Text Field:</b>")); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 1); + gtk_widget_set_valign(label, GTK_ALIGN_END); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(inner_vbox), label, FALSE, FALSE, 5); @@ -437,7 +425,7 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) gtk_widget_show(panel_entry_size_spinner); - pe_hbox = gtk_hbox_new(FALSE, 0); + pe_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); gtk_widget_show(pe_hbox); gtk_box_pack_start(GTK_BOX(pe_hbox), panel_entry_size_label, FALSE, FALSE, 10); @@ -458,12 +446,12 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) */ #define PAGE_DICTD /* only for navigation in Geany's symbol list ;-) */ { - GtkWidget *table, *button_get_list, *button_get_info; + GtkWidget *grid, *button_get_list, *button_get_info; GtkWidget *server_entry, *port_spinner, *dict_combo; - notebook_vbox = gtk_vbox_new(FALSE, 2); + notebook_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_widget_show(notebook_vbox); - inner_vbox = gtk_vbox_new(FALSE, 5); + inner_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_container_set_border_width(GTK_CONTAINER(inner_vbox), 5); gtk_widget_show(inner_vbox); gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), @@ -471,7 +459,6 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) /* server address */ label1 = gtk_label_new_with_mnemonic(_("Server:")); - gtk_widget_show(label1); server_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(server_entry), 256); @@ -479,25 +466,21 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) { gtk_entry_set_text(GTK_ENTRY(server_entry), dd->server); } - gtk_widget_show(server_entry); /* server port */ label2 = gtk_label_new_with_mnemonic(_("Server Port:")); - gtk_widget_show(label2); port_spinner = gtk_spin_button_new_with_range(0.0, 65536.0, 1.0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(port_spinner), dd->port); - gtk_widget_show(port_spinner); /* dictionary */ label3 = gtk_label_new_with_mnemonic(_("Dictionary:")); - gtk_widget_show(label3); - dict_combo = gtk_combo_box_new_text(); - gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), _("* (use all)")); - gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), + dict_combo = gtk_combo_box_text_new(); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dict_combo), _("* (use all)")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dict_combo), _("! (use all, stop after first match)")); - gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), "----------------"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dict_combo), "----------------"); if (dd->dictionary != NULL) { if (dd->dictionary[0] == '*') @@ -506,72 +489,61 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) gtk_combo_box_set_active(GTK_COMBO_BOX(dict_combo), 1); else { - gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), dd->dictionary); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dict_combo), dd->dictionary); gtk_combo_box_set_active(GTK_COMBO_BOX(dict_combo), 3); } } - gtk_widget_show(dict_combo); g_object_set_data(G_OBJECT(dialog), "server_entry", server_entry); g_object_set_data(G_OBJECT(dialog), "port_spinner", port_spinner); g_object_set_data(G_OBJECT(dialog), "dict_combo", dict_combo); - button_get_list = gtk_button_new_from_stock("gtk-refresh"); + button_get_list = gtk_button_new_from_icon_name("gtk-refresh", GTK_ICON_SIZE_BUTTON); gtk_widget_show(button_get_list); g_signal_connect(button_get_list, "clicked", G_CALLBACK(dict_dictd_get_list), dd); g_object_set_data(G_OBJECT(button_get_list), "dict_combo", dict_combo); g_object_set_data(G_OBJECT(button_get_list), "port_spinner", port_spinner); g_object_set_data(G_OBJECT(button_get_list), "server_entry", server_entry); - button_get_info = gtk_button_new_from_stock("gtk-info"); + button_get_info = gtk_button_new_from_icon_name("gtk-info", GTK_ICON_SIZE_BUTTON); gtk_widget_show(button_get_info); g_signal_connect(button_get_info, "clicked", G_CALLBACK(dict_dictd_get_information), dd); g_object_set_data(G_OBJECT(button_get_info), "port_spinner", port_spinner); g_object_set_data(G_OBJECT(button_get_info), "server_entry", server_entry); /* put it all together */ - table = gtk_table_new(3, 3, FALSE); - gtk_widget_show(table); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 5); - - gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 5); - gtk_misc_set_alignment(GTK_MISC(label1), 1, 0); - - gtk_table_attach(GTK_TABLE(table), server_entry, 1, 2, 0, 1, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); - - gtk_table_attach(GTK_TABLE(table), button_get_info, 2, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); - - gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 0); - gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); - - gtk_table_attach(GTK_TABLE(table), port_spinner, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); - - gtk_table_attach(GTK_TABLE(table), label3, 0, 1, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 0); - gtk_misc_set_alignment(GTK_MISC(label3), 1, 0); - - gtk_table_attach(GTK_TABLE(table), dict_combo, 1, 2, 2, 3, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 0, 0); - - gtk_table_attach(GTK_TABLE(table), button_get_list, 2, 3, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 5); - - gtk_box_pack_start(GTK_BOX(inner_vbox), table, FALSE, FALSE, 0); + grid = gtk_grid_new(); + gtk_grid_set_row_spacing (GTK_GRID(grid), 8); + gtk_grid_set_column_spacing (GTK_GRID(grid), 8); + + gtk_grid_attach(GTK_GRID(grid), label1, 0, 0, 1, 1); + gtk_widget_set_valign (label1, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label1, GTK_ALIGN_END); + + gtk_grid_attach(GTK_GRID(grid), server_entry, 1, 0, 1, 1); + gtk_widget_set_hexpand(server_entry, TRUE); + + gtk_grid_attach(GTK_GRID(grid), button_get_info, 2, 0, 1, 1); + + gtk_grid_attach(GTK_GRID(grid), label2, 0, 1, 1, 1); + gtk_widget_set_valign (label2, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label2, GTK_ALIGN_END); + + gtk_grid_attach(GTK_GRID(grid), port_spinner, 1, 1, 1, 1); + gtk_widget_set_hexpand(port_spinner, TRUE); + + gtk_grid_attach(GTK_GRID(grid), label3, 0, 2, 1, 1); + gtk_widget_set_valign (label3, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label3, GTK_ALIGN_END); + + gtk_grid_attach(GTK_GRID(grid), dict_combo, 1, 2, 1, 1); + gtk_widget_set_hexpand(dict_combo, TRUE); + + gtk_grid_attach(GTK_GRID(grid), button_get_list, 2, 2, 1, 1); + + gtk_widget_show_all(grid); + gtk_box_pack_start(GTK_BOX(inner_vbox), grid, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(notebook_vbox), inner_vbox, TRUE, TRUE, 5); } @@ -582,9 +554,9 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) { GtkWidget *label, *web_entry_label, *web_entry, *web_entry_box, *web_dicts_table; - notebook_vbox = gtk_vbox_new(FALSE, 5); + notebook_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_widget_show(notebook_vbox); - inner_vbox = gtk_vbox_new(FALSE, 5); + inner_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_container_set_border_width(GTK_CONTAINER(inner_vbox), 5); gtk_widget_show(inner_vbox); gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), @@ -592,7 +564,6 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) label = gtk_label_new(_("<b>Web search URL:</b>")); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(inner_vbox), label, FALSE, FALSE, 0); @@ -603,7 +574,7 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) gtk_entry_set_text(GTK_ENTRY(web_entry), dd->web_url); gtk_widget_show(web_entry); - web_entry_box = gtk_hbox_new(FALSE, 0); + web_entry_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show(web_entry_box); web_dicts_table = create_web_dicts_table(web_entry); @@ -617,7 +588,6 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) g_object_set_data(G_OBJECT(dialog), "web_entry", web_entry); label1 = xfd_wrap_label_new(_("Enter the URL of a web site which offers translation or dictionary services. Use {word} as placeholder for the searched word.")); - gtk_misc_set_alignment(GTK_MISC(label1), 0, 0); gtk_widget_show(label1); gtk_box_pack_start(GTK_BOX(inner_vbox), label1, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(notebook_vbox), inner_vbox, TRUE, TRUE, 5); @@ -628,13 +598,11 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) */ #define PAGE_SPELL /* only for navigation in Geany's symbol list ;-) */ { - GtkWidget *table, *label_help, *spell_entry, *spell_combo, *button_refresh, *image, *icon; - GtkListStore *store; - GtkCellRenderer *renderer; + GtkWidget *grid, *label_help, *spell_entry, *spell_combo, *button_refresh, *icon; - notebook_vbox = gtk_vbox_new(FALSE, 5); + notebook_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_widget_show(notebook_vbox); - inner_vbox = gtk_vbox_new(FALSE, 5); + inner_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5); gtk_container_set_border_width(GTK_CONTAINER(inner_vbox), 5); gtk_widget_show(inner_vbox); gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), @@ -666,21 +634,14 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) label2 = gtk_label_new_with_mnemonic(_("Dictionary:")); gtk_widget_show(label2); - store = gtk_list_store_new(1, G_TYPE_STRING); - spell_combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)); + spell_combo = gtk_combo_box_text_new (); g_object_set_data(G_OBJECT(spell_combo), "spell_entry", spell_entry); - renderer = gtk_cell_renderer_text_new(); - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(spell_combo), renderer, TRUE); - gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(spell_combo), renderer, "text", 0); - dict_spell_get_dictionaries(dd, spell_combo); g_signal_connect(spell_combo, "changed", G_CALLBACK(spell_combo_changed_cb), dd); gtk_widget_show(spell_combo); - button_refresh = gtk_button_new(); - image = gtk_image_new_from_stock("gtk-refresh", GTK_ICON_SIZE_BUTTON); - gtk_button_set_image(GTK_BUTTON(button_refresh), image); + button_refresh = gtk_button_new_from_icon_name("gtk-refresh", GTK_ICON_SIZE_BUTTON); gtk_widget_show(button_refresh); g_object_set_data(G_OBJECT(button_refresh), "spell_combo", spell_combo); g_signal_connect(button_refresh, "clicked", G_CALLBACK(button_dict_refresh_cb), dd); @@ -689,46 +650,36 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) g_object_set_data(G_OBJECT(spell_entry), "spell_combo", spell_combo); g_object_set_data(G_OBJECT(dialog), "spell_combo", spell_combo); g_object_set_data(G_OBJECT(dialog), "spell_entry", spell_entry); - g_object_unref(store); spell_entry_focus_cb(GTK_ENTRY(spell_entry), NULL, icon); /* initially set the icon */ - table = gtk_table_new(3, 3, FALSE); - gtk_widget_show(table); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 5); + grid = gtk_grid_new(); + gtk_widget_show(grid); + gtk_grid_set_row_spacing(GTK_GRID(grid), 8); + gtk_grid_set_column_spacing(GTK_GRID(grid), 8); - gtk_table_attach(GTK_TABLE(table), label_help, 0, 3, 0, 1, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), label_help, 0, 0, 3, 1); + gtk_widget_set_hexpand(label_help, TRUE); - gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 1, 2, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 5); - gtk_misc_set_alignment(GTK_MISC(label1), 1, 0); + gtk_grid_attach(GTK_GRID(grid), label1, 0, 1, 1, 1); + gtk_widget_set_valign (label1, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label1, GTK_ALIGN_END); - gtk_table_attach(GTK_TABLE(table), spell_entry, 1, 2, 1, 2, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), spell_entry, 1, 1, 1, 1); + gtk_widget_set_hexpand(spell_entry, TRUE); - gtk_table_attach(GTK_TABLE(table), icon, 2, 3, 1, 2, - (GtkAttachOptions) (0), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), icon, 2, 1, 1, 1); - gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 2, 3, - (GtkAttachOptions) (GTK_FILL), - (GtkAttachOptions) (0), 5, 0); - gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); + gtk_grid_attach(GTK_GRID(grid), label2, 0, 2, 1, 1); + gtk_widget_set_valign (label2, GTK_ALIGN_CENTER); + gtk_widget_set_halign (label2, GTK_ALIGN_END); - gtk_table_attach(GTK_TABLE(table), spell_combo, 1, 2, 2, 3, - (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), spell_combo, 1, 2, 1, 1); + gtk_widget_set_hexpand(spell_combo, TRUE); - gtk_table_attach(GTK_TABLE(table), button_refresh, 2, 3, 2, 3, - (GtkAttachOptions) (0), - (GtkAttachOptions) (0), 5, 5); + gtk_grid_attach(GTK_GRID(grid), button_refresh, 2, 2, 1, 1); - gtk_box_pack_start(GTK_BOX(inner_vbox), table, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(inner_vbox), grid, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(notebook_vbox), inner_vbox, TRUE, TRUE, 5); } diff --git a/lib/resources.xml b/lib/resources.xml new file mode 100644 index 0000000000000000000000000000000000000000..36b515f5032c23058d7b5fcf0673108b9362c617 --- /dev/null +++ b/lib/resources.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<gresources> + <gresource prefix="/org/xfce/dict"> + <file alias="icon">xfce4-dict.svg</file> + </gresource> +</gresources> diff --git a/lib/speedreader.c b/lib/speedreader.c index 59b422653e5f13cfb6096eae70e1f2acadfdbb66..ecf4b977c0f8a7e422eb226bd71f93f37dd31d89 100644 --- a/lib/speedreader.c +++ b/lib/speedreader.c @@ -251,7 +251,8 @@ static gchar *sr_replace_unicode_characters(const gchar *text, gboolean mark_par static void xfd_speed_reader_set_window_title(XfdSpeedReader *dialog, gint state) { gchar *title, *state_str, *name; - const gchar *button_label = GTK_STOCK_MEDIA_STOP; + const gchar *button_label = _("S_top"); + const gchar *button_image = "gtk-media-stop"; gboolean pausable = TRUE; XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog); @@ -262,7 +263,8 @@ static void xfd_speed_reader_set_window_title(XfdSpeedReader *dialog, gint state break; case XSR_STATE_FINISHED: state_str = _("Finished"); - button_label = GTK_STOCK_GO_BACK; + button_label = _("_Back"); + button_image = "gtk-go-back"; pausable = FALSE; break; default: @@ -274,6 +276,8 @@ static void xfd_speed_reader_set_window_title(XfdSpeedReader *dialog, gint state gtk_window_set_title(GTK_WINDOW(dialog), title); gtk_button_set_label(GTK_BUTTON(priv->button_stop), button_label); + gtk_button_set_image(GTK_BUTTON(priv->button_stop), + gtk_image_new_from_icon_name(button_image, GTK_ICON_SIZE_MENU)); gtk_widget_set_sensitive(priv->button_pause, pausable); g_free(title); @@ -350,9 +354,10 @@ static void sr_start(XfdSpeedReader *dialog) gint wpm, grouping; gint interval; const gchar *fontname; - PangoFontDescription *pfd; gchar *text, *cleaned_text; GtkTextIter start, end; + gchar *css; + GtkCssProvider *provider; /* clear the label text */ gtk_label_set_text(GTK_LABEL(priv->display_label), NULL); @@ -376,9 +381,15 @@ static void sr_start(XfdSpeedReader *dialog) /* set the font */ fontname = gtk_font_button_get_font_name(GTK_FONT_BUTTON(priv->button_font)); - pfd = pango_font_description_from_string(fontname); - gtk_widget_modify_font(priv->display_label, pfd); - pango_font_description_free(pfd); + + css = g_strdup_printf("* { font: %s; }", fontname); + provider = gtk_css_provider_new (); + gtk_css_provider_load_from_data (provider, css, -1, NULL); + gtk_style_context_add_provider ( + GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (priv->display_label))), + GTK_STYLE_PROVIDER(provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_free(css); /* word grouping */ grouping = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(priv->spin_grouping)); @@ -445,13 +456,13 @@ static void sr_pause(XfdSpeedReader *dialog, gboolean paused) if (paused) { gtk_button_set_image(GTK_BUTTON(priv->button_pause), - gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_MENU)); + gtk_image_new_from_icon_name("gtk-media-play", GTK_ICON_SIZE_MENU)); gtk_button_set_label(GTK_BUTTON(priv->button_pause), XFD_TITLE_RESUME); } else { gtk_button_set_image(GTK_BUTTON(priv->button_pause), - gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE, GTK_ICON_SIZE_MENU)); + gtk_image_new_from_icon_name("gtk-media-pause", GTK_ICON_SIZE_MENU)); gtk_button_set_label(GTK_BUTTON(priv->button_pause), XFD_TITLE_PAUSE); } /* set the new value */ @@ -504,8 +515,8 @@ static void sr_open_clicked_cb(GtkButton *button, XfdSpeedReader *window) dialog = gtk_file_chooser_dialog_new(_("Choose a file to load"), GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + "gtk-cancel", GTK_RESPONSE_CANCEL, + "gtk-open", GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); @@ -576,29 +587,31 @@ static void xfd_speed_reader_init(XfdSpeedReader *dialog) gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 330); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE); - gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); gtk_widget_set_name(GTK_WIDGET(dialog), "Xfce4Dict"); /* First page */ label_intro = xfd_wrap_label_new( _("This is an easy speed reading utility to help train you to read faster. " "It does this by flashing words at a rapid rate on the screen.")); + gtk_label_set_line_wrap ( GTK_LABEL (label_intro), TRUE); label_words = gtk_label_new_with_mnemonic(_("_Words per Minute:")); - gtk_misc_set_alignment(GTK_MISC(label_words), 1, 0.5); + gtk_widget_set_halign(label_words, GTK_ALIGN_END); + gtk_widget_set_valign(label_words, GTK_ALIGN_CENTER); priv->spin_wpm = gtk_spin_button_new_with_range(5.0, 10000.0, 5); gtk_label_set_mnemonic_widget(GTK_LABEL(label_words), priv->spin_wpm); priv->check_mark_paragraphs = gtk_check_button_new_with_mnemonic(_("_Mark Paragraphs")); - hbox_words = gtk_hbox_new(FALSE, 0); + hbox_words = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(hbox_words), label_words, FALSE, FALSE, 6); gtk_box_pack_start(GTK_BOX(hbox_words), priv->spin_wpm, FALSE, FALSE, 6); gtk_box_pack_start(GTK_BOX(hbox_words), priv->check_mark_paragraphs, FALSE, FALSE, 12); label_grouping = gtk_label_new_with_mnemonic(_("Word _Grouping:")); - gtk_misc_set_alignment(GTK_MISC(label_grouping), 1, 0.5); + gtk_widget_set_halign(label_grouping, GTK_ALIGN_END); + gtk_widget_set_valign(label_grouping, GTK_ALIGN_CENTER); label_grouping_desc = gtk_label_new(NULL); @@ -608,18 +621,19 @@ static void xfd_speed_reader_init(XfdSpeedReader *dialog) G_CALLBACK(sr_spin_grouping_changed_cb), label_grouping_desc); sr_spin_grouping_changed_cb(GTK_SPIN_BUTTON(priv->spin_grouping), GTK_LABEL(label_grouping_desc)); - hbox_grouping = gtk_hbox_new(FALSE, 0); + hbox_grouping = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(hbox_grouping), label_grouping, FALSE, FALSE, 6); gtk_box_pack_start(GTK_BOX(hbox_grouping), priv->spin_grouping, FALSE, FALSE, 6); gtk_box_pack_start(GTK_BOX(hbox_grouping), label_grouping_desc, FALSE, FALSE, 6); label_font = gtk_label_new_with_mnemonic(_("_Font Size:")); - gtk_misc_set_alignment(GTK_MISC(label_font), 1, 0.5); + gtk_widget_set_halign(label_font, GTK_ALIGN_END); + gtk_widget_set_valign(label_font, GTK_ALIGN_CENTER); priv->button_font = gtk_font_button_new(); gtk_label_set_mnemonic_widget(GTK_LABEL(label_font), priv->button_font); - hbox_font = gtk_hbox_new(FALSE, 0); + hbox_font = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(hbox_font), label_font, FALSE, FALSE, 6); gtk_box_pack_start(GTK_BOX(hbox_font), priv->button_font, FALSE, FALSE, 6); @@ -644,57 +658,42 @@ static void xfd_speed_reader_init(XfdSpeedReader *dialog) GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(swin), textview); - button_open = gtk_button_new(); - gtk_button_set_image(GTK_BUTTON(button_open), - gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU)); + button_open = gtk_button_new_from_icon_name("gtk-open", GTK_ICON_SIZE_MENU); g_signal_connect(button_open, "clicked", G_CALLBACK(sr_open_clicked_cb), dialog); -#if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text(button_open, _("Load the contents of a file")); -#endif - button_paste = gtk_button_new(); - gtk_button_set_image(GTK_BUTTON(button_paste), - gtk_image_new_from_stock(GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU)); + button_paste = gtk_button_new_from_icon_name("gtk-paste", GTK_ICON_SIZE_MENU); g_signal_connect(button_paste, "clicked", G_CALLBACK(sr_paste_clicked_cb), priv->buffer); -#if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text(button_paste, _("Clear the contents of the text field and paste the contents of the clipboard")); -#endif - button_clear = gtk_button_new(); - gtk_button_set_image(GTK_BUTTON(button_clear), - gtk_image_new_from_stock(GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU)); + button_clear = gtk_button_new_from_icon_name("gtk-clear", GTK_ICON_SIZE_MENU); g_signal_connect(button_clear, "clicked", G_CALLBACK(sr_clear_clicked_cb), priv->buffer); -#if GTK_CHECK_VERSION(2, 12, 0) gtk_widget_set_tooltip_text(button_clear, _("Clear the contents of the text field")); -#endif - vbox_text_buttons = gtk_vbox_new(FALSE, 6); + vbox_text_buttons = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start(GTK_BOX(vbox_text_buttons), button_open, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_text_buttons), button_paste, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_text_buttons), button_clear, FALSE, FALSE, 0); - hbox_text = gtk_hbox_new(FALSE, 0); + hbox_text = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start(GTK_BOX(hbox_text), swin, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox_text), vbox_text_buttons, FALSE, FALSE, 3); - priv->button_pause = gtk_dialog_add_button(GTK_DIALOG(dialog), _("P_ause"), RESPONSE_PAUSE); + priv->button_pause = gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-media-pause", RESPONSE_PAUSE); priv->button_start = gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Start"), RESPONSE_START); - priv->button_stop = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_MEDIA_STOP, RESPONSE_STOP); - gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); + priv->button_stop = gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-media-stop", RESPONSE_STOP); + gtk_dialog_add_button(GTK_DIALOG(dialog), "gtk-close", GTK_RESPONSE_CLOSE); gtk_widget_hide(priv->button_pause); gtk_widget_hide(priv->button_stop); gtk_button_set_image(GTK_BUTTON(priv->button_start), - gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_MENU)); - gtk_button_set_image(GTK_BUTTON(priv->button_pause), - gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE, GTK_ICON_SIZE_MENU)); - gtk_button_set_use_stock(GTK_BUTTON(priv->button_pause), TRUE); + gtk_image_new_from_icon_name("gtk-media-play", GTK_ICON_SIZE_MENU)); g_signal_connect(dialog, "response", G_CALLBACK(xfd_speed_reader_response_cb), NULL); - vbox = gtk_vbox_new(FALSE, 6); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start(GTK_BOX(vbox), label_intro, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox_words, FALSE, FALSE, 3); gtk_box_pack_start(GTK_BOX(vbox), hbox_grouping, FALSE, FALSE, 3); @@ -707,7 +706,7 @@ static void xfd_speed_reader_init(XfdSpeedReader *dialog) priv->display_label = gtk_label_new(NULL); gtk_widget_show(priv->display_label); - vbox = gtk_vbox_new(FALSE, 6); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start(GTK_BOX(vbox), priv->display_label, TRUE, TRUE, 6); priv->second_page = vbox; @@ -716,8 +715,8 @@ static void xfd_speed_reader_init(XfdSpeedReader *dialog) gtk_widget_grab_focus(textview); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), priv->first_page, TRUE, TRUE, 6); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), priv->second_page, TRUE, TRUE, 6); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), priv->first_page, TRUE, TRUE, 6); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), priv->second_page, TRUE, TRUE, 6); xfd_speed_reader_set_window_title(dialog, XSR_STATE_INITIAL); } @@ -738,4 +737,3 @@ GtkWidget *xfd_speed_reader_new(GtkWindow *parent, DictData *dd) return dialog; } - diff --git a/lib/spell.c b/lib/spell.c index 00c4bc825a0b00a610abc687e74308a25fb4f4c1..8d7b5cad3a01ef961d610a7bf4298325e38d9c89 100644 --- a/lib/spell.c +++ b/lib/spell.c @@ -339,19 +339,18 @@ static gchar **get_aspell_dicts(const gchar *str) void dict_spell_get_dictionaries(DictData *dd, GtkWidget *spell_combo) { - GtkTreeModel *model; + GtkComboBoxText *combo; const gchar *entry_cmd = gtk_entry_get_text( GTK_ENTRY(g_object_get_data(G_OBJECT(spell_combo), "spell_entry"))); - model = gtk_combo_box_get_model(GTK_COMBO_BOX(spell_combo)); - gtk_list_store_clear(GTK_LIST_STORE(model)); + combo = GTK_COMBO_BOX_TEXT (spell_combo); + gtk_combo_box_text_remove_all (combo); if (*entry_cmd != '\0') { gchar *tmp = NULL; gchar *cmd, *locale_cmd; gboolean use_enchant = FALSE; - GtkTreeIter iter; if (strstr(entry_cmd, "enchant") != NULL) { @@ -371,6 +370,7 @@ void dict_spell_get_dictionaries(DictData *dd, GtkWidget *spell_combo) { gchar **list; guint i, len; + guint item_count = 0; list = (use_enchant) ? get_enchant_dicts(tmp) : get_aspell_dicts(tmp); len = g_strv_length(list); @@ -378,10 +378,10 @@ void dict_spell_get_dictionaries(DictData *dd, GtkWidget *spell_combo) { if (NZV(list[i])) { - gtk_list_store_append(GTK_LIST_STORE(model), &iter); - gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, list[i], -1); + gtk_combo_box_text_append_text (combo, list[i]); if (strcmp(dd->spell_dictionary, list[i]) == 0) - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(spell_combo), &iter); + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), item_count); + item_count++; } } g_strfreev(list); diff --git a/lib/wraplabel.c b/lib/wraplabel.c index f7f9fb93fee502648f1a44900450512b617763eb..b1d10cf428b9f4e1460e148595c55001d28b5ac9 100644 --- a/lib/wraplabel.c +++ b/lib/wraplabel.c @@ -55,13 +55,16 @@ G_DEFINE_TYPE(XfdWrapLabel, xfd_wrap_label, GTK_TYPE_LABEL); static void xfd_wrap_label_size_request (GtkWidget *widget, GtkRequisition *req); static void xfd_wrap_label_size_allocate (GtkWidget *widget, GtkAllocation *alloc); static void xfd_wrap_label_set_wrap_width (GtkWidget *widget, gsize width); +static void xfd_wrap_label_get_preferred_width (GtkWidget *widget, gint *minimal_width, gint *natural_width); +static void xfd_wrap_label_get_preferred_height (GtkWidget *widget, gint *minimal_height, gint *natural_height); static void xfd_wrap_label_class_init(XfdWrapLabelClass *klass) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); - widget_class->size_request = xfd_wrap_label_size_request; + widget_class->get_preferred_width = xfd_wrap_label_get_preferred_width; + widget_class->get_preferred_height = xfd_wrap_label_get_preferred_height; widget_class->size_allocate = xfd_wrap_label_size_allocate; g_type_class_add_private(klass, sizeof (XfdWrapLabelPrivate)); @@ -121,6 +124,25 @@ static void xfd_wrap_label_size_allocate(GtkWidget *widget, GtkAllocation *alloc } +static void +xfd_wrap_label_get_preferred_width (GtkWidget *widget, gint *minimal_width, gint *natural_width) +{ + GtkRequisition requisition; + + xfd_wrap_label_size_request (widget, &requisition); + *minimal_width = *natural_width = requisition.width; +} + +static void +xfd_wrap_label_get_preferred_height (GtkWidget *widget, gint *minimal_height, gint *natural_height) +{ + GtkRequisition requisition; + + xfd_wrap_label_size_request (widget, &requisition); + *minimal_height = *natural_height = requisition.height; +} + + void xfd_wrap_label_set_text(GtkLabel *label, const gchar *text) { XfdWrapLabelPrivate *priv = XFD_WRAP_LABEL_GET_PRIVATE(label); @@ -138,7 +160,6 @@ GtkWidget *xfd_wrap_label_new(const gchar *text) gtk_label_set_text(GTK_LABEL(l), text); pango_layout_set_wrap(gtk_label_get_layout(GTK_LABEL(l)), PANGO_WRAP_WORD_CHAR); - gtk_misc_set_alignment(GTK_MISC(l), 0.0, 0.0); return l; } diff --git a/panel-plugin/xfce4-dict-plugin.c b/panel-plugin/xfce4-dict-plugin.c index 9d79df624ba0500a48b020452bb101e7c5e3b16b..88f3b50e501d888eb3d0b57ffb14c28b5bd048e4 100644 --- a/panel-plugin/xfce4-dict-plugin.c +++ b/panel-plugin/xfce4-dict-plugin.c @@ -36,6 +36,7 @@ #include <string.h> #include "libdict.h" +#include "resources.h" typedef struct @@ -43,8 +44,6 @@ typedef struct DictData *dd; XfcePanelPlugin *plugin; - GtkTooltips *tooltips; - GtkWidget *panel_button; GtkWidget *panel_button_image; GtkWidget *box; @@ -53,46 +52,24 @@ typedef struct static gboolean entry_is_dirty = FALSE; -static GdkPixbuf *dict_plugin_load_and_scale(const guint8 *data, gint dstw, gint dsth) -{ - GdkPixbuf *pb, *pb_scaled; - gint pb_w, pb_h; - - pb = gdk_pixbuf_new_from_inline(-1, data, FALSE, NULL); - pb_w = gdk_pixbuf_get_width(pb); - pb_h = gdk_pixbuf_get_height(pb); - - if (dstw == pb_w && dsth == pb_h) - return(pb); - else if (dstw < 0) - dstw = (dsth * pb_w) / pb_h; - else if (dsth < 0) - dsth = (dstw * pb_h) / pb_w; - - pb_scaled = gdk_pixbuf_scale_simple(pb, dstw, dsth, GDK_INTERP_HYPER); - g_object_unref(G_OBJECT(pb)); - - return pb_scaled; -} - static gboolean dict_plugin_panel_set_size(XfcePanelPlugin *plugin, gint wsize, DictPanelData *dpd) { + GtkBorder border; + GtkStyleContext *context; gint size; gint bsize = wsize; + bsize /= xfce_panel_plugin_get_nrows (plugin); -#if defined(LIBXFCE4PANEL_CHECK_VERSION) && LIBXFCE4PANEL_CHECK_VERSION(4,9,0) - bsize /= xfce_panel_plugin_get_nrows(plugin); -#endif - - size = bsize - 2 - (2 * MAX(dpd->panel_button->style->xthickness, - dpd->panel_button->style->ythickness)); + context = gtk_widget_get_style_context (GTK_WIDGET (dpd->panel_button)); + gtk_style_context_get_border (context, gtk_widget_get_state_flags (GTK_WIDGET (dpd->panel_button)), &border); + size = bsize - 2 * MAX (border.left + border.right, border.top + border.bottom); - dpd->dd->icon = dict_plugin_load_and_scale(dict_gui_get_icon_data(), size, -1); + dpd->dd->icon = gdk_pixbuf_new_from_resource_at_scale("/org/xfce/dict/icon", + size, -1, TRUE, NULL); gtk_image_set_from_pixbuf(GTK_IMAGE(dpd->panel_button_image), dpd->dd->icon); -#if defined(LIBXFCE4PANEL_CHECK_VERSION) && LIBXFCE4PANEL_CHECK_VERSION(4,9,0) if (dpd->dd->show_panel_entry && xfce_panel_plugin_get_mode(dpd->plugin) != XFCE_PANEL_PLUGIN_MODE_VERTICAL) { @@ -109,16 +86,6 @@ static gboolean dict_plugin_panel_set_size(XfcePanelPlugin *plugin, gint wsize, gtk_widget_hide(dpd->dd->panel_entry); xfce_panel_plugin_set_small(plugin, TRUE); } -#else - if (dpd->dd->show_panel_entry && - xfce_panel_plugin_get_orientation(plugin) == GTK_ORIENTATION_HORIZONTAL) - { - gtk_widget_show(dpd->dd->panel_entry); - gtk_widget_set_size_request(dpd->dd->panel_entry, dpd->dd->panel_entry_size, -1); - } - else - gtk_widget_hide(dpd->dd->panel_entry); -#endif gtk_widget_set_size_request(dpd->panel_button, bsize, bsize); @@ -126,39 +93,15 @@ static gboolean dict_plugin_panel_set_size(XfcePanelPlugin *plugin, gint wsize, } -/* TODO remove me, unused -static void dict_toggle_main_window(GtkWidget *button, DictData *dd) -{ - if (GTK_WIDGET_VISIBLE(dd->window)) - gtk_widget_hide(dd->window); - else - { - const gchar *panel_text = ""; - - if (dd->panel_entry != NULL) - panel_text = gtk_entry_get_text(GTK_ENTRY(dd->panel_entry)); - - dict_show_main_window(dd); - if (NZV(panel_text)) - { - dict_search_word(dd, panel_text); - gtk_entry_set_text(GTK_ENTRY(dd->main_entry), panel_text); - } - gtk_widget_grab_focus(dd->main_entry); - } -} -*/ - - static void dict_plugin_panel_button_clicked(GtkWidget *button, DictPanelData *dpd) { - if (GTK_WIDGET_VISIBLE(dpd->dd->window)) + if (gtk_widget_get_visible(GTK_WIDGET(dpd->dd->window))) { /* we must query geometry settings here because position and maximized state * doesn't work when the window is hidden */ dict_gui_query_geometry(dpd->dd); - gtk_widget_hide(dpd->dd->window); + gtk_widget_hide(GTK_WIDGET(dpd->dd->window)); } else { @@ -181,37 +124,6 @@ static void dict_plugin_panel_button_clicked(GtkWidget *button, DictPanelData *d } -/* Handle user messages (xfce4-dict) */ -static gboolean dict_plugin_message_received(GtkWidget *w, GdkEventClient *ev, DictPanelData *dpd) -{ - if (ev->data_format == 8 && strncmp(ev->data.b, "xfdict", 6) == 0) - { - gchar flags = ev->data.b[6]; - gchar *tts = ev->data.b + 7; - - dpd->dd->mode_in_use = dict_set_search_mode_from_flags(dpd->dd->mode_in_use, flags); - - if (NZV(tts)) - { - gtk_entry_set_text(GTK_ENTRY(dpd->dd->main_entry), tts); - dict_search_word(dpd->dd, tts); - } - else if (flags & DICT_FLAGS_FOCUS_PANEL_ENTRY && dpd->dd->show_panel_entry) - { - xfce_panel_plugin_focus_widget(dpd->plugin, dpd->dd->panel_entry); - } - else - { - dict_plugin_panel_button_clicked(NULL, dpd); - } - - return TRUE; - } - - return FALSE; -} - - static gboolean dict_plugin_set_selection(DictPanelData *dpd) { GdkScreen *gscreen; @@ -222,23 +134,21 @@ static gboolean dict_plugin_set_selection(DictPanelData *dpd) win = gtk_invisible_new(); gtk_widget_realize(win); - xwin = GDK_WINDOW_XID(GTK_WIDGET(win)->window); + xwin = GDK_WINDOW_XID(gtk_widget_get_window (GTK_WIDGET(win))); gscreen = gtk_widget_get_screen(win); g_snprintf(selection_name, sizeof (selection_name), XFCE_DICT_SELECTION"%d", gdk_screen_get_number(gscreen)); - selection_atom = XInternAtom(GDK_DISPLAY(), selection_name, False); + selection_atom = XInternAtom(gdk_x11_display_get_xdisplay(gdk_display_get_default()), selection_name, False); - if (XGetSelectionOwner(GDK_DISPLAY(), selection_atom)) + if (XGetSelectionOwner(gdk_x11_display_get_xdisplay(gdk_display_get_default()), selection_atom)) { gtk_widget_destroy(win); return FALSE; } - XSelectInput(GDK_DISPLAY(), xwin, PropertyChangeMask); - XSetSelectionOwner(GDK_DISPLAY(), selection_atom, xwin, GDK_CURRENT_TIME); - - g_signal_connect(win, "client-event", G_CALLBACK(dict_plugin_message_received), dpd); + XSelectInput(gdk_x11_display_get_xdisplay(gdk_display_get_default()), xwin, PropertyChangeMask); + XSetSelectionOwner(gdk_x11_display_get_xdisplay(gdk_display_get_default()), selection_atom, xwin, GDK_CURRENT_TIME); return TRUE; } @@ -257,7 +167,7 @@ static void dict_plugin_free_data(XfcePanelPlugin *plugin, DictPanelData *dpd) /* if the main window is visible, query geometry as usual, if it is hidden the geometry * was queried when it was hidden */ - if (GTK_WIDGET_VISIBLE(dpd->dd->window)) + if (gtk_widget_get_visible(GTK_WIDGET(dpd->dd->window))) { dict_gui_query_geometry(dpd->dd); } @@ -265,28 +175,17 @@ static void dict_plugin_free_data(XfcePanelPlugin *plugin, DictPanelData *dpd) if (dialog != NULL) gtk_widget_destroy(dialog); - gtk_object_sink(GTK_OBJECT(dpd->tooltips)); - dict_free_data(dpd->dd); g_free(dpd); } -#if defined(LIBXFCE4PANEL_CHECK_VERSION) && LIBXFCE4PANEL_CHECK_VERSION(4,9,0) static void dict_plugin_panel_change_mode(XfcePanelPlugin *plugin, XfcePanelPluginMode mode, DictPanelData *dpd) { dict_plugin_panel_set_size(plugin, xfce_panel_plugin_get_size(plugin), dpd); } -#else -static void dict_plugin_panel_change_orientation(XfcePanelPlugin *plugin, - GtkOrientation orientation, DictPanelData *dpd) -{ - dict_plugin_panel_set_size(plugin, xfce_panel_plugin_get_size(plugin), dpd); -} -#endif - static void dict_plugin_style_set(XfcePanelPlugin *plugin, gpointer unused, DictPanelData *dpd) { @@ -381,7 +280,7 @@ static gboolean entry_buttonpress_cb(GtkWidget *entry, GdkEventButton *event, Di toplevel = gtk_widget_get_toplevel(entry); /* Grab entry focus if possible */ - if (event->button != 3 && toplevel && toplevel->window) + if (event->button != 3 && toplevel && gtk_widget_get_window (toplevel)) xfce_panel_plugin_focus_widget(dpd->plugin, entry); return FALSE; @@ -397,11 +296,11 @@ static void entry_changed_cb(GtkEditable *editable, DictPanelData *dpd) static void dict_plugin_drag_data_received(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y, GtkSelectionData *data, guint info, guint ltime, DictPanelData *dpd) { - if ((data != NULL) && (data->length >= 0) && (data->format == 8)) + if ((data != NULL) && (gtk_selection_data_get_length(data) >= 0) && (gtk_selection_data_get_format(data) == 8)) { if (widget == dpd->panel_button || widget == dpd->dd->panel_entry) { - gtk_entry_set_text(GTK_ENTRY(dpd->dd->main_entry), (const gchar*) data->data); + gtk_entry_set_text(GTK_ENTRY(dpd->dd->main_entry), (const gchar*) gtk_selection_data_get_data(data)); } dict_drag_data_received(widget, drag_context, x, y, data, info, ltime, dpd->dd); @@ -411,12 +310,11 @@ static void dict_plugin_drag_data_received(GtkWidget *widget, GdkDragContext *dr static void dict_plugin_construct(XfcePanelPlugin *plugin) { + GtkCssProvider *css_provider; DictPanelData *dpd = g_new0(DictPanelData, 1); xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); - g_thread_init(NULL); - dpd->dd = dict_create_dictdata(); dpd->dd->is_plugin = TRUE; dpd->plugin = plugin; @@ -424,13 +322,18 @@ static void dict_plugin_construct(XfcePanelPlugin *plugin) dict_read_rc_file(dpd->dd); dpd->panel_button = xfce_create_panel_button(); - - dpd->tooltips = gtk_tooltips_new(); - gtk_tooltips_set_tip(dpd->tooltips, dpd->panel_button, _("Look up a word"), NULL); + gtk_widget_set_tooltip_text (dpd->panel_button, _("Look up a word")); dpd->panel_button_image = gtk_image_new(); gtk_container_add(GTK_CONTAINER(dpd->panel_button), GTK_WIDGET(dpd->panel_button_image)); + /* Setup Gtk style */ + css_provider = gtk_css_provider_new (); + gtk_css_provider_load_from_data (css_provider, "button { padding: 1px; border-width: 1px;}", -1, NULL); + gtk_style_context_add_provider (GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (dpd->panel_button))), + GTK_STYLE_PROVIDER (css_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + gtk_widget_show_all(dpd->panel_button); g_signal_connect(dpd->panel_button, "clicked", G_CALLBACK(dict_plugin_panel_button_clicked), dpd); @@ -441,11 +344,7 @@ static void dict_plugin_construct(XfcePanelPlugin *plugin) g_signal_connect(dpd->dd->close_button, "clicked", G_CALLBACK(dict_plugin_close_button_clicked), dpd); g_signal_connect(plugin, "free-data", G_CALLBACK(dict_plugin_free_data), dpd); g_signal_connect(plugin, "size-changed", G_CALLBACK(dict_plugin_panel_set_size), dpd); -#if defined(LIBXFCE4PANEL_CHECK_VERSION) && LIBXFCE4PANEL_CHECK_VERSION(4,9,0) g_signal_connect(plugin, "mode-changed", G_CALLBACK(dict_plugin_panel_change_mode), dpd); -#else - g_signal_connect(plugin, "orientation-changed", G_CALLBACK(dict_plugin_panel_change_orientation), dpd); -#endif g_signal_connect(plugin, "style-set", G_CALLBACK(dict_plugin_style_set), dpd); g_signal_connect(plugin, "save", G_CALLBACK(dict_plugin_write_rc_file), dpd); g_signal_connect(plugin, "configure-plugin", G_CALLBACK(dict_plugin_properties_dialog), dpd); @@ -459,16 +358,16 @@ static void dict_plugin_construct(XfcePanelPlugin *plugin) g_signal_connect(dpd->dd->pref_menu_item, "activate", G_CALLBACK(dict_plugin_properties_dialog), dpd); /* panel entry */ - dpd->dd->panel_entry = gtk_entry_new(); - gtk_entry_set_icon_from_stock(GTK_ENTRY(dpd->dd->panel_entry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR); + dpd->dd->panel_entry = gtk_search_entry_new(); + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dpd->dd->panel_entry), GTK_ENTRY_ICON_SECONDARY, "gtk-clear"); gtk_entry_set_width_chars(GTK_ENTRY(dpd->dd->panel_entry), 25); - gtk_entry_set_text(GTK_ENTRY(dpd->dd->panel_entry), _("Search term")); + gtk_entry_set_placeholder_text(GTK_ENTRY(dpd->dd->panel_entry), _("Search term")); g_signal_connect(dpd->dd->panel_entry, "icon-release", G_CALLBACK(entry_icon_release_cb), dpd); g_signal_connect(dpd->dd->panel_entry, "activate", G_CALLBACK(entry_activate_cb), dpd); g_signal_connect(dpd->dd->panel_entry, "button-press-event", G_CALLBACK(entry_buttonpress_cb), dpd); g_signal_connect(dpd->dd->panel_entry, "changed", G_CALLBACK(entry_changed_cb), dpd); - dpd->box = gtk_hbox_new(FALSE, 3); + dpd->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); gtk_widget_show(dpd->box); gtk_box_pack_start(GTK_BOX(dpd->box), dpd->panel_button, FALSE, FALSE, 0); @@ -487,6 +386,8 @@ static void dict_plugin_construct(XfcePanelPlugin *plugin) g_signal_connect(dpd->panel_button, "drag-data-received", G_CALLBACK(dict_plugin_drag_data_received), dpd); g_signal_connect(dpd->dd->panel_entry, "drag-data-received", G_CALLBACK(dict_plugin_drag_data_received), dpd); + dict_acquire_dbus_name(dpd->dd); + dict_gui_status_add(dpd->dd, _("Ready")); } XFCE_PANEL_PLUGIN_REGISTER(dict_plugin_construct); diff --git a/panel-plugin/xfce4-dict-plugin.desktop.in b/panel-plugin/xfce4-dict-plugin.desktop.in index 4965a140b43db56f0bc78b749e12aa039fbb7d8a..7404c55c35e6d347a74b55be61f20676bd74bd31 100644 --- a/panel-plugin/xfce4-dict-plugin.desktop.in +++ b/panel-plugin/xfce4-dict-plugin.desktop.in @@ -6,4 +6,4 @@ _Comment=A plugin to query different dictionaries. Icon=xfce4-dict X-XFCE-Module=xfce4dict X-XFCE-Internal=false - +X-XFCE-API=2.0 diff --git a/xfce4-dict.svg b/pixmaps/xfce4-dict.svg similarity index 100% rename from xfce4-dict.svg rename to pixmaps/xfce4-dict.svg diff --git a/src/popup_plugin.c b/src/popup_plugin.c index 6e1bef8ce0fb1dde556a53f76ece14b64570ea7c..5c7bcd645f7e79d2493dd4f574c93a5de27c3981 100644 --- a/src/popup_plugin.c +++ b/src/popup_plugin.c @@ -26,62 +26,37 @@ #include "libdict.h" -static gboolean check_is_running(GtkWidget *widget, Window *xid) -{ - GdkScreen *gscreen; - gchar selection_name[32]; - Atom selection_atom; - - gscreen = gtk_widget_get_screen(widget); - g_snprintf(selection_name, sizeof(selection_name), XFCE_DICT_SELECTION"%d", - gdk_screen_get_number(gscreen)); - selection_atom = XInternAtom(GDK_DISPLAY(), selection_name, False); - - if ((*xid = XGetSelectionOwner(GDK_DISPLAY(), selection_atom))) - return TRUE; - - return FALSE; -} +gboolean dict_find_panel_plugin(gchar flags, const gchar *text); gboolean dict_find_panel_plugin(gchar flags, const gchar *text) { - gboolean ret = FALSE; - GdkEventClient gev; - GtkWidget *win; - Window id; - - win = gtk_invisible_new(); - gtk_widget_realize(win); - - gev.type = GDK_CLIENT_EVENT; - gev.window = win->window; - gev.send_event = TRUE; - gev.message_type = gdk_atom_intern("STRING", FALSE); - gev.data_format = 8; - - if (text == NULL) - text = ""; - else if (strlen(text) > 12) - g_warning("The passed search text is longer than 12 characters and was truncated. Currently you can pass only a maximum of 12 characters to the panel plugin (or even less when using non-ASCII characters)."); + gboolean ret = FALSE; + GError *error = NULL; + Dict *proxy; + + proxy = dict_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION, + G_DBUS_PROXY_FLAGS_NONE, + "org.xfce.Dict", + "/org/xfce/Dict", + NULL, + &error); + + if (!proxy) + { + g_warning ("error connecting to org.xfce.Dict, reason was: %s", error->message); + g_clear_error(&error); + return FALSE; + } - /* format of the send string: "xfdict?text": - * "xfdict" is for identification of ourselves - * ? is a bitmask to control the behaviour, it can contain one or more of DICT_FLAGS_*, - * we send it as %c to ensure it takes only one char in the string, - * everything after this is the text to search, given on command line */ - /** FIXME: remove the limit of 12 characters, maybe by sending more than message or by - * using another IPC mechanism, maybe DBus? */ - g_snprintf(gev.data.b, sizeof gev.data.b, "xfdict%c%s", flags, text); + ret = dict_call_search_sync (proxy, text, NULL, &error); - if (check_is_running(win, &id)) + if (error) { - gdk_event_send_client_message((GdkEvent*) &gev, (GdkNativeWindow) id); - ret = TRUE; + g_warning ("failed to connecting to org.xfce.Dict, reason was: %s", error->message); + g_clear_error(&error); + return FALSE; } - gdk_flush(); - gtk_widget_destroy(win); - return ret; } diff --git a/src/xfce4-dict.c b/src/xfce4-dict.c index 0121ddf6185cc77fef477bdcc14cfaa24c31c64e..dd84279df1f240496f3cda1d7ceeb41ed4ae6865 100644 --- a/src/xfce4-dict.c +++ b/src/xfce4-dict.c @@ -83,7 +83,7 @@ static void pref_dialog_activated(GtkMenuItem *menuitem, DictData *dd) } -static gchar get_flags() +static gchar get_flags(void) { gchar flags = 0; @@ -140,7 +140,7 @@ gint main(gint argc, gchar *argv[]) if (show_version) { g_print("%s %s (Xfce %s)\n\n", PACKAGE, PACKAGE_VERSION, xfce_version_string()); - g_print("%s\n", "Copyright (c) 2006-2015"); + g_print("%s\n", "Copyright (c) 2006-2016"); g_print("\tEnrico Tröger <enrico@xfce.org>\n\n"); g_print(_("Please report bugs to <%s>."), PACKAGE_BUGREPORT); g_print("\n"); @@ -173,8 +173,6 @@ gint main(gint argc, gchar *argv[]) dd->is_plugin = FALSE; dd->verbose_mode = verbose_mode; - g_thread_init(NULL); - dict_read_rc_file(dd); /* set search mode from command line flags, if any */ @@ -199,6 +197,8 @@ gint main(gint argc, gchar *argv[]) g_free(search_text); + dict_acquire_dbus_name(dd); + gtk_widget_show_all(dd->window); gtk_main();