diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-05-19 23:26:43 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2007-05-19 23:26:43 (GMT) |
commit | 8a464eb8db16d1664e6c5d3b6e207b26adb91902 (patch) | |
tree | 7fba53ddc0bf3bad926a61b8a93d934211d3976c /src | |
parent | 938689ffb15bc5ba3d0201105ed5e0454a7598d6 (diff) |
Implement focus and view sizing.
Diffstat (limited to 'src')
-rw-r--r-- | src/hulahop-browser.cpp | 61 |
1 files changed, 56 insertions, 5 deletions
diff --git a/src/hulahop-browser.cpp b/src/hulahop-browser.cpp index 40d6562..cac3492 100644 --- a/src/hulahop-browser.cpp +++ b/src/hulahop-browser.cpp @@ -21,6 +21,7 @@ #include <nsComponentManagerUtils.h> #include <nsCOMPtr.h> #include <nsIWebBrowser.h> +#include <nsIWebBrowserFocus.h> #include <nsILocalFile.h> #include <nsIBaseWindow.h> #include <nsXULAppAPI.h> @@ -68,6 +69,34 @@ hulahop_startup() return TRUE; } +static gboolean +child_focus_in_cb(GtkWidget *widget, + GdkEventFocus *event, + HulahopBrowser *browser) +{ + nsCOMPtr<nsIWebBrowserFocus> webBrowserFocus; + webBrowserFocus = do_QueryInterface(browser->browser); + NS_ENSURE_TRUE(webBrowserFocus, FALSE); + + webBrowserFocus->Activate(); + + return FALSE; +} + +static gboolean +child_focus_out_cb(GtkWidget *widget, + GdkEventFocus *event, + HulahopBrowser *browser) +{ + nsCOMPtr<nsIWebBrowserFocus> webBrowserFocus; + webBrowserFocus = do_QueryInterface(browser->browser); + NS_ENSURE_TRUE(webBrowserFocus, FALSE); + + webBrowserFocus->Deactivate(); + + return FALSE; +} + static void hulahop_browser_realize(GtkWidget *widget) { @@ -114,6 +143,16 @@ hulahop_browser_realize(GtkWidget *widget) rv = browser->base_window->Create(); g_assert(NS_SUCCEEDED(rv)); + + GtkWidget *child = GTK_BIN(widget)->child; + g_assert(child != NULL); + + g_signal_connect_object(child, "focus-in-event", + G_CALLBACK(child_focus_in_cb), + browser, (GConnectFlags)0); + g_signal_connect_object(child, "focus-out-event", + G_CALLBACK(child_focus_out_cb), + browser, (GConnectFlags)0); } static void @@ -123,16 +162,27 @@ hulahop_browser_map(GtkWidget *widget) GTK_WIDGET_SET_FLAGS(widget, GTK_MAPPED); - nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(browser->browser); - - // XXX hack around problem. probably widget/gtk2 window initialization. - baseWindow->SetVisibility(PR_FALSE); - baseWindow->SetVisibility(PR_TRUE); + browser->base_window->SetVisibility(PR_TRUE); gdk_window_show(widget->window); } static void +hulahop_browser_size_allocate(GtkWidget *widget, GtkAllocation *allocation) +{ + HulahopBrowser *browser = HULAHOP_BROWSER(widget); + + if (GTK_WIDGET_REALIZED(widget)) { + gdk_window_move_resize(widget->window, + allocation->x, allocation->y, + allocation->width, allocation->height); + + browser->base_window->SetSize(allocation->width, + allocation->height, PR_TRUE); + } +} + +static void hulahop_browser_class_init(HulahopBrowserClass *browser_class) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(browser_class); @@ -141,6 +191,7 @@ hulahop_browser_class_init(HulahopBrowserClass *browser_class) widget_class->realize = hulahop_browser_realize; widget_class->map = hulahop_browser_map; + widget_class->size_allocate = hulahop_browser_size_allocate; } static void |