diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-08-17 13:37:09 +0800 |
---|---|---|
committer | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2011-08-17 13:37:09 +0800 |
commit | 1ba7c298c282b4775c29c80214009876e943648d (patch) | |
tree | 1c686f02b2c4850ad1214739fe76bf48e807f598 /libempathy-gtk/empathy-theme-adium.c | |
parent | ede83c3b09c25b9e08c0aa54d842d844b582e0d8 (diff) | |
download | gsoc2013-empathy-1ba7c298c282b4775c29c80214009876e943648d.tar gsoc2013-empathy-1ba7c298c282b4775c29c80214009876e943648d.tar.gz gsoc2013-empathy-1ba7c298c282b4775c29c80214009876e943648d.tar.bz2 gsoc2013-empathy-1ba7c298c282b4775c29c80214009876e943648d.tar.lz gsoc2013-empathy-1ba7c298c282b4775c29c80214009876e943648d.tar.xz gsoc2013-empathy-1ba7c298c282b4775c29c80214009876e943648d.tar.zst gsoc2013-empathy-1ba7c298c282b4775c29c80214009876e943648d.zip |
Factor out WebKit context menu as a utility
Diffstat (limited to 'libempathy-gtk/empathy-theme-adium.c')
-rw-r--r-- | libempathy-gtk/empathy-theme-adium.c | 121 |
1 files changed, 3 insertions, 118 deletions
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c index e5227f506..4e32630d5 100644 --- a/libempathy-gtk/empathy-theme-adium.c +++ b/libempathy-gtk/empathy-theme-adium.c @@ -212,39 +212,6 @@ theme_adium_navigation_policy_decision_requested_cb (WebKitWebView * return TRUE; } -static void -theme_adium_copy_address_cb (GtkMenuItem *menuitem, - gpointer user_data) -{ - WebKitHitTestResult *hit_test_result = WEBKIT_HIT_TEST_RESULT (user_data); - gchar *uri; - GtkClipboard *clipboard; - - g_object_get (G_OBJECT (hit_test_result), "link-uri", &uri, NULL); - - clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text (clipboard, uri, -1); - - clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY); - gtk_clipboard_set_text (clipboard, uri, -1); - - g_free (uri); -} - -static void -theme_adium_open_address_cb (GtkMenuItem *menuitem, - gpointer user_data) -{ - WebKitHitTestResult *hit_test_result = WEBKIT_HIT_TEST_RESULT (user_data); - gchar *uri; - - g_object_get (G_OBJECT (hit_test_result), "link-uri", &uri, NULL); - - empathy_url_show (GTK_WIDGET (menuitem), uri); - - g_free (uri); -} - /* Replace each %@ in format with string passed in args */ static gchar * string_with_format (const gchar *format, @@ -1296,90 +1263,6 @@ theme_adium_message_acknowledged (EmpathyChatView *view, theme_adium_remove_mark_from_message (self, id); } -static void -theme_adium_context_menu_selection_done_cb (GtkMenuShell *menu, gpointer user_data) -{ - WebKitHitTestResult *hit_test_result = WEBKIT_HIT_TEST_RESULT (user_data); - - g_object_unref (hit_test_result); -} - -static void -theme_adium_context_menu_for_event (EmpathyThemeAdium *theme, GdkEventButton *event) -{ - WebKitWebView *view = WEBKIT_WEB_VIEW (theme); - WebKitHitTestResult *hit_test_result; - WebKitHitTestResultContext context; - GtkWidget *menu; - GtkWidget *item; - - hit_test_result = webkit_web_view_get_hit_test_result (view, event); - g_object_get (G_OBJECT (hit_test_result), "context", &context, NULL); - - /* The menu */ - menu = empathy_context_menu_new (GTK_WIDGET (view)); - - /* Select all item */ - item = gtk_image_menu_item_new_from_stock (GTK_STOCK_SELECT_ALL, NULL); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - - g_signal_connect_swapped (item, "activate", - G_CALLBACK (webkit_web_view_select_all), - view); - - /* Copy menu item */ - if (webkit_web_view_can_copy_clipboard (view)) { - item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - - g_signal_connect_swapped (item, "activate", - G_CALLBACK (webkit_web_view_copy_clipboard), - view); - } - - /* Clear menu item */ - item = gtk_separator_menu_item_new (); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - - item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLEAR, NULL); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - - g_signal_connect_swapped (item, "activate", - G_CALLBACK (empathy_chat_view_clear), - view); - - /* We will only add the following menu items if we are - * right-clicking a link */ - if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK) { - /* Separator */ - item = gtk_separator_menu_item_new (); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - - /* Copy Link Address menu item */ - item = gtk_menu_item_new_with_mnemonic (_("_Copy Link Address")); - g_signal_connect (item, "activate", - G_CALLBACK (theme_adium_copy_address_cb), - hit_test_result); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - - /* Open Link menu item */ - item = gtk_menu_item_new_with_mnemonic (_("_Open Link")); - g_signal_connect (item, "activate", - G_CALLBACK (theme_adium_open_address_cb), - hit_test_result); - gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); - } - - g_signal_connect (GTK_MENU_SHELL (menu), "selection-done", - G_CALLBACK (theme_adium_context_menu_selection_done_cb), - hit_test_result); - - /* Display the menu */ - gtk_widget_show_all (menu); - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, - event->button, event->time); -} - static gboolean theme_adium_button_press_event (GtkWidget *widget, GdkEventButton *event) { @@ -1393,7 +1276,9 @@ theme_adium_button_press_event (GtkWidget *widget, GdkEventButton *event) * item ourselves, so we disable our customized menu * if the developer extras are enabled. */ if (!developer_tools_enabled) { - theme_adium_context_menu_for_event (EMPATHY_THEME_ADIUM (widget), event); + empathy_webkit_context_menu_for_event ( + WEBKIT_WEB_VIEW (widget), event, + EMPATHY_WEBKIT_MENU_CLEAR); return TRUE; } } |