Changeset 121771 in webkit


Ignore:
Timestamp:
Jul 3, 2012 8:43:42 AM (12 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] Add WebKitWebView::context-menu-dismissed signal to WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=90386

Reviewed by Martin Robinson.

  • UIProcess/API/gtk/WebKitWebView.cpp:

(webkit_web_view_class_init): Add context-menu-dismissed signal.
(contextMenuDismissed): Emit context-menu-dismissed signal.
(webkitWebViewPopulateContextMenu): Connect to deactivate signal
of the GtkMenu and emit WebKitWebView::context-menu-dismissed when
the gtk menu is deactivated.

  • UIProcess/API/gtk/WebKitWebView.h:

(_WebKitWebViewClass): Add virtual methos for
context-menu-dismissed signal.

  • UIProcess/API/gtk/tests/TestContextMenu.cpp:

(testContextMenuDismissed):
(beforeAll):

  • UIProcess/gtk/WebContextMenuProxyGtk.h:

(WebKit::WebContextMenuProxyGtk::gtkMenu): Get the GtkMenu built
for the context menu proxy.

Location:
trunk/Source/WebKit2
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r121770 r121771  
     12012-07-03  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Add WebKitWebView::context-menu-dismissed signal to WebKit2 GTK+ API
     4        https://bugs.webkit.org/show_bug.cgi?id=90386
     5
     6        Reviewed by Martin Robinson.
     7
     8        * UIProcess/API/gtk/WebKitWebView.cpp:
     9        (webkit_web_view_class_init): Add context-menu-dismissed signal.
     10        (contextMenuDismissed): Emit context-menu-dismissed signal.
     11        (webkitWebViewPopulateContextMenu): Connect to deactivate signal
     12        of the GtkMenu and emit WebKitWebView::context-menu-dismissed when
     13        the gtk menu is deactivated.
     14        * UIProcess/API/gtk/WebKitWebView.h:
     15        (_WebKitWebViewClass): Add virtual methos for
     16        context-menu-dismissed signal.
     17        * UIProcess/API/gtk/tests/TestContextMenu.cpp:
     18        (testContextMenuDismissed):
     19        (beforeAll):
     20        * UIProcess/gtk/WebContextMenuProxyGtk.h:
     21        (WebKit::WebContextMenuProxyGtk::gtkMenu): Get the GtkMenu built
     22        for the context menu proxy.
     23
    1242012-07-03  Piotr Roguski  <p.roguski@samsung.com>
    225
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp

    r121097 r121771  
    8989
    9090    CONTEXT_MENU,
     91    CONTEXT_MENU_DISMISSED,
    9192
    9293    LAST_SIGNAL
     
    10441045                     GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE,
    10451046                     WEBKIT_TYPE_HIT_TEST_RESULT);
     1047
     1048    /**
     1049     * WebKitWebView::context-menu-dismissed:
     1050     * @web_view: the #WebKitWebView on which the signal is emitted
     1051     *
     1052     * Emitted after #WebKitWebView::context-menu signal, if the context menu is shown,
     1053     * to notify that the context menu is dismissed.
     1054     */
     1055    signals[CONTEXT_MENU_DISMISSED] =
     1056        g_signal_new("context-menu-dismissed",
     1057                     G_TYPE_FROM_CLASS(webViewClass),
     1058                     G_SIGNAL_RUN_LAST,
     1059                     G_STRUCT_OFFSET(WebKitWebViewClass, context_menu_dismissed),
     1060                     0, 0,
     1061                     g_cclosure_marshal_VOID__VOID,
     1062                     G_TYPE_NONE, 0);
    10461063}
    10471064
     
    13391356}
    13401357
     1358static void contextMenuDismissed(GtkMenuShell*, WebKitWebView* webView)
     1359{
     1360    g_signal_emit(webView, signals[CONTEXT_MENU_DISMISSED], 0, NULL);
     1361}
     1362
    13411363void webkitWebViewPopulateContextMenu(WebKitWebView* webView, WKArrayRef wkProposedMenu, WKHitTestResultRef wkHitTestResult)
    13421364{
     
    13601382    webkitContextMenuPopulate(contextMenu.get(), contextMenuItems);
    13611383    contextMenuProxy->populate(contextMenuItems);
     1384
     1385    g_signal_connect(contextMenuProxy->gtkMenu(), "deactivate", G_CALLBACK(contextMenuDismissed), webView);
    13621386
    13631387    // Clear the menu to make sure it's useless after signal emission.
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h

    r121093 r121771  
    128128    WebKitWebViewBaseClass parent;
    129129
    130     void       (* load_changed)          (WebKitWebView             *web_view,
    131                                           WebKitLoadEvent            load_event);
    132     gboolean   (* load_failed)           (WebKitWebView             *web_view,
    133                                           WebKitLoadEvent            load_event,
    134                                           const gchar               *failing_uri,
    135                                           GError                    *error);
    136 
    137     GtkWidget *(* create)                (WebKitWebView             *web_view);
    138     void       (* ready_to_show)         (WebKitWebView             *web_view);
    139     void       (* run_as_modal)          (WebKitWebView             *web_view);
    140     void       (* close)                 (WebKitWebView             *web_view);
    141 
    142     gboolean   (* script_dialog)         (WebKitWebView             *web_view,
    143                                           WebKitScriptDialog        *dialog);
    144 
    145     gboolean   (* decide_policy)         (WebKitWebView             *web_view,
    146                                           WebKitPolicyDecision      *decision,
    147                                           WebKitPolicyDecisionType   type);
    148     gboolean   (* permission_request)    (WebKitWebView             *web_view,
    149                                           WebKitPermissionRequest   *permission_request);
    150     void       (* mouse_target_changed)  (WebKitWebView             *web_view,
    151                                           WebKitHitTestResult       *hit_test_result,
    152                                           guint                      modifiers);
    153     gboolean   (* print_requested)       (WebKitWebView             *web_view,
    154                                           WebKitPrintOperation      *print_operation);
    155     void       (* resource_load_started) (WebKitWebView             *web_view,
    156                                           WebKitWebResource         *resource,
    157                                           WebKitURIRequest          *request);
    158     gboolean   (* enter_fullscreen)      (WebKitWebView             *web_view);
    159     gboolean   (* leave_fullscreen)      (WebKitWebView             *web_view);
    160     gboolean   (* run_file_chooser)      (WebKitWebView             *web_view,
    161                                           WebKitFileChooserRequest  *request);
    162     gboolean   (* context_menu)         (WebKitWebView              *web_view,
    163                                          WebKitContextMenu          *context_menu,
    164                                          GdkEvent                   *event,
    165                                          WebKitHitTestResult        *hit_test_result);
     130    void       (* load_changed)           (WebKitWebView             *web_view,
     131                                           WebKitLoadEvent            load_event);
     132    gboolean   (* load_failed)            (WebKitWebView             *web_view,
     133                                           WebKitLoadEvent            load_event,
     134                                           const gchar               *failing_uri,
     135                                           GError                    *error);
     136
     137    GtkWidget *(* create)                 (WebKitWebView             *web_view);
     138    void       (* ready_to_show)          (WebKitWebView             *web_view);
     139    void       (* run_as_modal)           (WebKitWebView             *web_view);
     140    void       (* close)                  (WebKitWebView             *web_view);
     141
     142    gboolean   (* script_dialog)          (WebKitWebView             *web_view,
     143                                           WebKitScriptDialog        *dialog);
     144
     145    gboolean   (* decide_policy)          (WebKitWebView             *web_view,
     146                                           WebKitPolicyDecision      *decision,
     147                                           WebKitPolicyDecisionType   type);
     148    gboolean   (* permission_request)     (WebKitWebView             *web_view,
     149                                           WebKitPermissionRequest   *permission_request);
     150    void       (* mouse_target_changed)   (WebKitWebView             *web_view,
     151                                           WebKitHitTestResult       *hit_test_result,
     152                                           guint                      modifiers);
     153    gboolean   (* print_requested)        (WebKitWebView             *web_view,
     154                                           WebKitPrintOperation      *print_operation);
     155    void       (* resource_load_started)  (WebKitWebView             *web_view,
     156                                           WebKitWebResource         *resource,
     157                                           WebKitURIRequest          *request);
     158    gboolean   (* enter_fullscreen)       (WebKitWebView             *web_view);
     159    gboolean   (* leave_fullscreen)       (WebKitWebView             *web_view);
     160    gboolean   (* run_file_chooser)       (WebKitWebView             *web_view,
     161                                           WebKitFileChooserRequest  *request);
     162    gboolean   (* context_menu)           (WebKitWebView             *web_view,
     163                                           WebKitContextMenu         *context_menu,
     164                                           GdkEvent                  *event,
     165                                           WebKitHitTestResult       *hit_test_result);
     166    void       (* context_menu_dismissed) (WebKitWebView             *web_view);
    166167
    167168    /* Padding for future expansion */
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestContextMenu.cpp

    r121093 r121771  
    5050    }
    5151
     52    static void contextMenuDismissedCallback(WebKitWebView*, ContextMenuTest* test)
     53    {
     54        test->contextMenuDismissed();
     55    }
     56
    5257    ContextMenuTest()
    5358        : m_menuPositionX(0)
     
    5560    {
    5661        g_signal_connect(m_webView, "context-menu", G_CALLBACK(contextMenuCallback), this);
     62        g_signal_connect(m_webView, "context-menu-dismissed", G_CALLBACK(contextMenuDismissedCallback), this);
    5763    }
    5864
     
    6369
    6470    virtual bool contextMenu(WebKitContextMenu*, GdkEvent*, WebKitHitTestResult*) = 0;
     71
     72    virtual void contextMenuDismissed()
     73    {
     74        quitMainLoop();
     75    }
    6576
    6677    bool shouldShowInputMethodsMenu()
     
    182193    {
    183194        showContextMenuAtPositionAndWaitUntilFinished(0, 0);
     195    }
     196
     197    static gboolean simulateEscKeyIdleCallback(ContextMenuTest* test)
     198    {
     199        test->keyStroke(GDK_KEY_Escape);
     200        return FALSE;
     201    }
     202
     203    void dismissContextMenuAndWaitUntilFinished()
     204    {
     205        g_idle_add(reinterpret_cast<GSourceFunc>(simulateEscKeyIdleCallback), this);
     206        g_main_loop_run(m_mainLoop);
    184207    }
    185208
     
    406429        gtk_menu_shell_activate_item(GTK_MENU_SHELL(menu), GTK_WIDGET(item), TRUE);
    407430        m_itemToActivateLabel = 0;
    408         quitMainLoop();
    409431    }
    410432
     
    658680}
    659681
     682class ContextMenuDismissedTest: public ContextMenuTest {
     683public:
     684    MAKE_GLIB_TEST_FIXTURE(ContextMenuDismissedTest);
     685
     686    ContextMenuDismissedTest()
     687        : m_dismissed(false)
     688    {
     689    }
     690
     691    bool contextMenu(WebKitContextMenu* contextMenu, GdkEvent*, WebKitHitTestResult*)
     692    {
     693        quitMainLoop();
     694        // Show the default context menu.
     695        return false;
     696    }
     697
     698    void contextMenuDismissed()
     699    {
     700        m_dismissed = true;
     701        ContextMenuTest::contextMenuDismissed();
     702    }
     703
     704    void showContextMenuAndWaitUntilDismissed()
     705    {
     706        showContextMenuAndWaitUntilFinished();
     707        dismissContextMenuAndWaitUntilFinished();
     708    }
     709
     710    bool m_dismissed;
     711};
     712
     713static void testContextMenuDismissed(ContextMenuDismissedTest* test, gconstpointer)
     714{
     715    test->showInWindowAndWaitUntilMapped();
     716
     717    test->loadHtml("<html><body>WebKitGTK+ Context menu tests</body></html>", "file:///");
     718    test->waitUntilLoadFinished();
     719
     720    test->showContextMenuAndWaitUntilDismissed();
     721    g_assert(test->m_dismissed);
     722}
     723
    660724void beforeAll()
    661725{
     
    665729    ContextMenuDisabledTest::add("WebKitWebView", "disable-menu", testContextMenuDisableMenu);
    666730    ContextMenuSubmenuTest::add("WebKitWebView", "submenu", testContextMenuSubMenu);
     731    ContextMenuDismissedTest::add("WebKitWebView", "menu-dismissed", testContextMenuDismissed);
    667732}
    668733
  • trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h

    r120305 r121771  
    5050
    5151    void populate(Vector<WebCore::ContextMenuItem>&);
     52    GtkMenu* gtkMenu() const { return m_menu.platformDescription(); }
    5253
    5354private:
Note: See TracChangeset for help on using the changeset viewer.