static void test_xim_load_status_cb(WebKitWebView* webView, GParamSpec* spec, gpointer data) { KeyEventFixture* fixture = (KeyEventFixture*)data; WebKitLoadStatus status = webkit_web_view_get_load_status(webView); if (status != WEBKIT_LOAD_FINISHED) return; GtkIMContext* imContext = 0; g_object_get(webView, "im-context", &imContext, NULL); g_assert(imContext); gchar* originalId = g_strdup(gtk_im_multicontext_get_context_id(GTK_IM_MULTICONTEXT(imContext))); gtk_im_multicontext_set_context_id(GTK_IM_MULTICONTEXT(imContext), "xim"); // Test that commits that happen outside of key events // change the text field immediately. This closely replicates // the behavior of SCIM. fixture->info->text = g_strdup("debian"); if (!gtk_test_widget_send_key(GTK_WIDGET(fixture->webView), gdk_unicode_to_keyval('d'), 0)) g_assert_not_reached(); if (!gtk_test_widget_send_key(GTK_WIDGET(fixture->webView), gdk_unicode_to_keyval('e'), 0)) g_assert_not_reached(); if (!gtk_test_widget_send_key(GTK_WIDGET(fixture->webView), gdk_unicode_to_keyval('b'), 0)) g_assert_not_reached(); if (!gtk_test_widget_send_key(GTK_WIDGET(fixture->webView), gdk_unicode_to_keyval('i'), 0)) g_assert_not_reached(); if (!gtk_test_widget_send_key(GTK_WIDGET(fixture->webView), gdk_unicode_to_keyval('a'), 0)) g_assert_not_reached(); if (!gtk_test_widget_send_key(GTK_WIDGET(fixture->webView), gdk_unicode_to_keyval('n'), 0)) g_assert_not_reached(); gtk_im_multicontext_set_context_id(GTK_IM_MULTICONTEXT(imContext), originalId); g_free(originalId); g_object_unref(imContext); g_idle_add(verify_contents, fixture); }
static GtkWidget* inputMethodsMenuItem (WebKitWebView* webView) { if (gtk_major_version > 2 || (gtk_major_version == 2 && gtk_minor_version >= 10)) { GtkSettings* settings = webView ? gtk_widget_get_settings(GTK_WIDGET(webView)) : gtk_settings_get_default(); gboolean showMenu = TRUE; if (settings) g_object_get(settings, "gtk-show-input-method-menu", &showMenu, NULL); if (!showMenu) return 0; } GtkWidget* menuitem = gtk_image_menu_item_new_with_mnemonic( _("Input _Methods")); WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView); GtkWidget* imContextMenu = gtk_menu_new(); gtk_im_multicontext_append_menuitems(GTK_IM_MULTICONTEXT(priv->imContext), GTK_MENU_SHELL(imContextMenu)); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), imContextMenu); return menuitem; }
void gtkhtml_editor_private_constructed (GtkhtmlEditor *editor) { GtkhtmlEditorPrivate *priv = editor->priv; GtkHTML *html; GtkWidget *widget; GtkToolbar *toolbar; GtkToolItem *tool_item; /* Construct main window widgets. */ widget = gtkhtml_editor_get_managed_widget (editor, "/main-menu"); gtk_box_pack_start (GTK_BOX (editor->vbox), widget, FALSE, FALSE, 0); priv->main_menu = g_object_ref (widget); gtk_widget_show (widget); widget = gtkhtml_editor_get_managed_widget (editor, "/main-toolbar"); gtk_box_pack_start (GTK_BOX (editor->vbox), widget, FALSE, FALSE, 0); priv->main_toolbar = g_object_ref (widget); gtk_widget_show (widget); widget = gtkhtml_editor_get_managed_widget (editor, "/edit-toolbar"); gtk_toolbar_set_style (GTK_TOOLBAR (widget), GTK_TOOLBAR_BOTH_HORIZ); gtk_box_pack_start (GTK_BOX (editor->vbox), widget, FALSE, FALSE, 0); priv->edit_toolbar = g_object_ref (widget); gtk_widget_show (widget); widget = gtkhtml_editor_get_managed_widget (editor, "/html-toolbar"); gtk_toolbar_set_style (GTK_TOOLBAR (widget), GTK_TOOLBAR_BOTH_HORIZ); gtk_box_pack_start (GTK_BOX (editor->vbox), widget, FALSE, FALSE, 0); priv->html_toolbar = g_object_ref (widget); gtk_widget_show (widget); widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (editor->vbox), widget, TRUE, TRUE, 0); priv->scrolled_window = g_object_ref (widget); gtk_widget_show (widget); widget = GTK_WIDGET (gtkhtml_editor_get_html (editor)); gtk_container_add (GTK_CONTAINER (priv->scrolled_window), widget); gtk_widget_show (widget); /* Add some combo boxes to the "edit" toolbar. */ toolbar = GTK_TOOLBAR (priv->edit_toolbar); tool_item = gtk_tool_item_new (); widget = gtkhtml_combo_box_new_with_action ( GTK_RADIO_ACTION (ACTION (STYLE_NORMAL))); gtk_combo_box_set_focus_on_click (GTK_COMBO_BOX (widget), FALSE); gtk_container_add (GTK_CONTAINER (tool_item), widget); gtk_widget_set_tooltip_text (widget, _("Paragraph Style")); gtk_toolbar_insert (toolbar, tool_item, 0); priv->style_combo_box = g_object_ref (widget); gtk_widget_show_all (GTK_WIDGET (tool_item)); tool_item = gtk_separator_tool_item_new (); gtk_toolbar_insert (toolbar, tool_item, 0); gtk_widget_show_all (GTK_WIDGET (tool_item)); tool_item = gtk_tool_item_new (); widget = gtkhtml_combo_box_new_with_action ( GTK_RADIO_ACTION (ACTION (MODE_HTML))); gtk_combo_box_set_focus_on_click (GTK_COMBO_BOX (widget), FALSE); gtk_container_add (GTK_CONTAINER (tool_item), widget); gtk_widget_set_tooltip_text (widget, _("Editing Mode")); gtk_toolbar_insert (toolbar, tool_item, 0); priv->mode_combo_box = g_object_ref (widget); gtk_widget_show_all (GTK_WIDGET (tool_item)); /* Add some combo boxes to the "html" toolbar. */ toolbar = GTK_TOOLBAR (priv->html_toolbar); tool_item = gtk_tool_item_new (); widget = gtkhtml_color_combo_new (); gtk_container_add (GTK_CONTAINER (tool_item), widget); gtk_widget_set_tooltip_text (widget, _("Font Color")); gtk_toolbar_insert (toolbar, tool_item, 0); priv->color_combo_box = g_object_ref (widget); gtk_widget_show_all (GTK_WIDGET (tool_item)); tool_item = gtk_tool_item_new (); widget = gtkhtml_combo_box_new_with_action ( GTK_RADIO_ACTION (ACTION (SIZE_PLUS_ZERO))); gtk_combo_box_set_focus_on_click (GTK_COMBO_BOX (widget), FALSE); gtk_container_add (GTK_CONTAINER (tool_item), widget); gtk_widget_set_tooltip_text (widget, _("Font Size")); gtk_toolbar_insert (toolbar, tool_item, 0); priv->size_combo_box = g_object_ref (widget); gtk_widget_show_all (GTK_WIDGET (tool_item)); /* Initialize painters (requires "edit_area"). */ html = gtkhtml_editor_get_html (editor); gtk_widget_ensure_style (GTK_WIDGET (html)); priv->html_painter = g_object_ref (html->engine->painter); priv->plain_painter = html_plain_painter_new (priv->edit_area, TRUE); /* Add input methods to the context menu. */ widget = gtkhtml_editor_get_managed_widget ( editor, "/context-menu/context-input-methods-menu"); widget = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget)); gtk_im_multicontext_append_menuitems ( GTK_IM_MULTICONTEXT (html->priv->im_context), GTK_MENU_SHELL (widget)); /* Configure color stuff. */ priv->palette = gtkhtml_color_palette_new (); priv->text_color = gtkhtml_color_state_new (); gtkhtml_color_state_set_default_label ( priv->text_color, _("Automatic")); gtkhtml_color_state_set_palette ( priv->text_color, priv->palette); /* Text color widgets share state. */ widget = priv->color_combo_box; gtkhtml_color_combo_set_state ( GTKHTML_COLOR_COMBO (widget), priv->text_color); widget = WIDGET (TEXT_PROPERTIES_COLOR_COMBO); gtkhtml_color_combo_set_state ( GTKHTML_COLOR_COMBO (widget), priv->text_color); /* These color widgets share a custom color palette. */ widget = WIDGET (CELL_PROPERTIES_COLOR_COMBO); gtkhtml_color_combo_set_palette ( GTKHTML_COLOR_COMBO (widget), priv->palette); widget = WIDGET (PAGE_PROPERTIES_BACKGROUND_COLOR_COMBO); gtkhtml_color_combo_set_palette ( GTKHTML_COLOR_COMBO (widget), priv->palette); widget = WIDGET (PAGE_PROPERTIES_LINK_COLOR_COMBO); gtkhtml_color_combo_set_palette ( GTKHTML_COLOR_COMBO (widget), priv->palette); widget = WIDGET (TABLE_PROPERTIES_COLOR_COMBO); gtkhtml_color_combo_set_palette ( GTKHTML_COLOR_COMBO (widget), priv->palette); }
void gKey::setActiveControl(gControl *control) { if (_im_control) { if (!_no_input_method) { #if DEBUG_IM fprintf(stderr, "gtk_im_context_focus_out\n"); #endif gtk_im_context_set_client_window (_im_context, 0); gtk_im_context_focus_out(_im_context); } _im_control = NULL; _no_input_method = false; } if (control) { _im_control = control; _no_input_method = control->noInputMethod(); if (!_no_input_method) { gtk_im_context_set_client_window (_im_context, _im_window); //gtk_widget_get_window(_im_control->widget)); gtk_im_context_focus_in(_im_context); gtk_im_context_reset(_im_context); #if DEBUG_IM fprintf(stderr, "gtk_im_context_focus_in: %s\n", gtk_im_multicontext_get_context_id(GTK_IM_MULTICONTEXT(_im_context))); if (control->getClass() == Type_gTextBox) { char *method; g_object_get(GTK_ENTRY(control->widget), "im-module", &method, (char *)NULL); fprintf(stderr, "GtkEntry im-module: %s\n", method); } #endif //_im_state_required = -1; } //memset(_key_code, 0, sizeof(uint) * MAX_CODE); } }