From 8a464eb8db16d1664e6c5d3b6e207b26adb91902 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Sat, 19 May 2007 23:26:43 +0000 Subject: Implement focus and view sizing. --- (limited to 'src') 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 #include #include +#include #include #include #include @@ -68,6 +69,34 @@ hulahop_startup() return TRUE; } +static gboolean +child_focus_in_cb(GtkWidget *widget, + GdkEventFocus *event, + HulahopBrowser *browser) +{ + nsCOMPtr 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 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 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 -- cgit v0.9.1