Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2654)

Unified Diff: chrome/browser/ui/gtk/gtk_util.cc

Issue 10831226: Panels refactor: Support browserless panels on Linux. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/gtk/gtk_util.cc
diff --git a/chrome/browser/ui/gtk/gtk_util.cc b/chrome/browser/ui/gtk/gtk_util.cc
index 8839f0a56c222e7c920dd6bc8dc080ad96184a93..843ea7ee7ef70bb4124ec89e33be2026763e08d2 100644
--- a/chrome/browser/ui/gtk/gtk_util.cc
+++ b/chrome/browser/ui/gtk/gtk_util.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/ui/gtk/gtk_util.h"
#include <cairo/cairo.h>
+#include <dlfcn.h>
#include <algorithm>
#include <cstdarg>
@@ -25,7 +26,6 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/gtk/browser_window_gtk.h"
#include "chrome/browser/ui/gtk/gtk_theme_service.h"
@@ -278,16 +278,6 @@ gboolean PaintNoBackground(GtkWidget* widget,
return TRUE;
}
-WebContents* GetBrowserWindowSelectedWebContents(BrowserWindow* window) {
- BrowserWindowGtk* browser_window = static_cast<BrowserWindowGtk*>(
- window);
- return chrome::GetActiveWebContents(browser_window->browser());
-}
-
-GtkWidget* GetBrowserWindowFocusedWidget(BrowserWindow* window) {
- return gtk_window_get_focus(window->GetNativeWindow());
-}
-
} // namespace
namespace gtk_util {
@@ -1013,16 +1003,16 @@ void ApplyMessageDialogQuirks(GtkWidget* dialog) {
// against the current render view host, otherwise emit the specified |signal|
// against the focused widget.
// TODO(suzhe): This approach does not work for plugins.
-void DoCutCopyPaste(BrowserWindow* window,
+void DoCutCopyPaste(GtkWindow* window,
+ WebContents* web_contents,
void (RenderWidgetHost::*method)(),
const char* signal) {
- GtkWidget* widget = GetBrowserWindowFocusedWidget(window);
+ GtkWidget* widget = gtk_window_get_focus(window);
if (widget == NULL)
return; // Do nothing if no focused widget.
- WebContents* current_tab = GetBrowserWindowSelectedWebContents(window);
- if (current_tab && widget == current_tab->GetContentNativeView()) {
- (current_tab->GetRenderViewHost()->*method)();
+ if (web_contents && widget == web_contents->GetContentNativeView()) {
+ (web_contents->GetRenderViewHost()->*method)();
} else {
guint id;
if ((id = g_signal_lookup(signal, G_OBJECT_TYPE(widget))) != 0)
@@ -1030,16 +1020,63 @@ void DoCutCopyPaste(BrowserWindow* window,
}
}
-void DoCut(BrowserWindow* window) {
- DoCutCopyPaste(window, &RenderWidgetHost::Cut, "cut-clipboard");
+void DoCut(GtkWindow* window, WebContents* web_contents) {
+ DoCutCopyPaste(window, web_contents,
+ &RenderWidgetHost::Cut, "cut-clipboard");
}
-void DoCopy(BrowserWindow* window) {
- DoCutCopyPaste(window, &RenderWidgetHost::Copy, "copy-clipboard");
+void DoCopy(GtkWindow* window, WebContents* web_contents) {
+ DoCutCopyPaste(window, web_contents,
+ &RenderWidgetHost::Copy, "copy-clipboard");
}
-void DoPaste(BrowserWindow* window) {
- DoCutCopyPaste(window, &RenderWidgetHost::Paste, "paste-clipboard");
+void DoPaste(GtkWindow* window, WebContents* web_contents) {
+ DoCutCopyPaste(window, web_contents,
+ &RenderWidgetHost::Paste, "paste-clipboard");
+}
+
+// Ubuntu patches their verrsion of GTK+ so that there is always a
Evan Stade 2012/08/10 01:52:30 sp: verrsion
jennb 2012/08/10 18:45:42 Done.
+// gripper in the bottom right corner of the window. We dynamically
+// look up this symbol because it's a non-standard Ubuntu extension to
+// GTK+. We always need to disable this feature since we can't
+// communicate this to WebKit easily.
+typedef void (*gtk_window_set_has_resize_grip_func)(GtkWindow*, gboolean);
+gtk_window_set_has_resize_grip_func gtk_window_set_has_resize_grip_sym;
+
+void DisableResizeGrip(GtkWindow* window) {
+ static bool resize_grip_looked_up = false;
+ if (!resize_grip_looked_up) {
+ resize_grip_looked_up = true;
+ gtk_window_set_has_resize_grip_sym =
+ reinterpret_cast<gtk_window_set_has_resize_grip_func>(
+ dlsym(NULL, "gtk_window_set_has_resize_grip"));
+ }
+ if (gtk_window_set_has_resize_grip_sym)
+ gtk_window_set_has_resize_grip_sym(window, FALSE);
+}
+
+GdkCursorType GdkWindowEdgeToGdkCursorType(GdkWindowEdge edge) {
+ switch (edge) {
+ case GDK_WINDOW_EDGE_NORTH_WEST:
+ return GDK_TOP_LEFT_CORNER;
+ case GDK_WINDOW_EDGE_NORTH:
+ return GDK_TOP_SIDE;
+ case GDK_WINDOW_EDGE_NORTH_EAST:
+ return GDK_TOP_RIGHT_CORNER;
+ case GDK_WINDOW_EDGE_WEST:
+ return GDK_LEFT_SIDE;
+ case GDK_WINDOW_EDGE_EAST:
+ return GDK_RIGHT_SIDE;
+ case GDK_WINDOW_EDGE_SOUTH_WEST:
+ return GDK_BOTTOM_LEFT_CORNER;
+ case GDK_WINDOW_EDGE_SOUTH:
+ return GDK_BOTTOM_SIDE;
+ case GDK_WINDOW_EDGE_SOUTH_EAST:
+ return GDK_BOTTOM_RIGHT_CORNER;
+ default:
+ NOTREACHED();
+ }
+ return GDK_LAST_CURSOR;
}
} // namespace gtk_util

Powered by Google App Engine
This is Rietveld 408576698