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

Side by Side Diff: chrome/browser/ui/gtk/gtk_window_util.cc

Issue 10831226: Panels refactor: Support browserless panels on Linux. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove static initializer 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/gtk/gtk_window_util.h"
6
7 #include <dlfcn.h>
8 #include "content/public/browser/render_view_host.h"
9 #include "content/public/browser/web_contents.h"
10
11 using content::RenderWidgetHost;
12 using content::WebContents;
13
14 namespace gtk_window_util {
15
16 // Performs Cut/Copy/Paste operation on the |window|.
17 // If the current render view is focused, then just call the specified |method|
18 // against the current render view host, otherwise emit the specified |signal|
19 // against the focused widget.
20 // TODO(suzhe): This approach does not work for plugins.
21 void DoCutCopyPaste(GtkWindow* window,
22 WebContents* web_contents,
23 void (RenderWidgetHost::*method)(),
24 const char* signal) {
25 GtkWidget* widget = gtk_window_get_focus(window);
26 if (widget == NULL)
27 return; // Do nothing if no focused widget.
28
29 if (web_contents && widget == web_contents->GetContentNativeView()) {
30 (web_contents->GetRenderViewHost()->*method)();
31 } else {
32 guint id;
33 if ((id = g_signal_lookup(signal, G_OBJECT_TYPE(widget))) != 0)
34 g_signal_emit(widget, id, 0);
35 }
36 }
37
38 void DoCut(GtkWindow* window, WebContents* web_contents) {
39 DoCutCopyPaste(window, web_contents,
40 &RenderWidgetHost::Cut, "cut-clipboard");
41 }
42
43 void DoCopy(GtkWindow* window, WebContents* web_contents) {
44 DoCutCopyPaste(window, web_contents,
45 &RenderWidgetHost::Copy, "copy-clipboard");
46 }
47
48 void DoPaste(GtkWindow* window, WebContents* web_contents) {
49 DoCutCopyPaste(window, web_contents,
50 &RenderWidgetHost::Paste, "paste-clipboard");
51 }
52
53 // Ubuntu patches their version of GTK+ so that there is always a
54 // gripper in the bottom right corner of the window. We dynamically
55 // look up this symbol because it's a non-standard Ubuntu extension to
56 // GTK+. We always need to disable this feature since we can't
57 // communicate this to WebKit easily.
58 typedef void (*gtk_window_set_has_resize_grip_func)(GtkWindow*, gboolean);
59 gtk_window_set_has_resize_grip_func gtk_window_set_has_resize_grip_sym;
60
61 void DisableResizeGrip(GtkWindow* window) {
62 static bool resize_grip_looked_up = false;
63 if (!resize_grip_looked_up) {
64 resize_grip_looked_up = true;
65 gtk_window_set_has_resize_grip_sym =
66 reinterpret_cast<gtk_window_set_has_resize_grip_func>(
67 dlsym(NULL, "gtk_window_set_has_resize_grip"));
68 }
69 if (gtk_window_set_has_resize_grip_sym)
70 gtk_window_set_has_resize_grip_sym(window, FALSE);
71 }
72
73 GdkCursorType GdkWindowEdgeToGdkCursorType(GdkWindowEdge edge) {
74 switch (edge) {
75 case GDK_WINDOW_EDGE_NORTH_WEST:
76 return GDK_TOP_LEFT_CORNER;
77 case GDK_WINDOW_EDGE_NORTH:
78 return GDK_TOP_SIDE;
79 case GDK_WINDOW_EDGE_NORTH_EAST:
80 return GDK_TOP_RIGHT_CORNER;
81 case GDK_WINDOW_EDGE_WEST:
82 return GDK_LEFT_SIDE;
83 case GDK_WINDOW_EDGE_EAST:
84 return GDK_RIGHT_SIDE;
85 case GDK_WINDOW_EDGE_SOUTH_WEST:
86 return GDK_BOTTOM_LEFT_CORNER;
87 case GDK_WINDOW_EDGE_SOUTH:
88 return GDK_BOTTOM_SIDE;
89 case GDK_WINDOW_EDGE_SOUTH_EAST:
90 return GDK_BOTTOM_RIGHT_CORNER;
91 default:
92 NOTREACHED();
93 }
94 return GDK_LAST_CURSOR;
95 }
96
97 } // namespace gtk_window_util
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/gtk_window_util.h ('k') | chrome/browser/ui/panels/detached_panel_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698