| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/gtk/gtk_window_util.h" | 5 #include "chrome/browser/ui/gtk/gtk_window_util.h" |
| 6 | 6 |
| 7 #include <dlfcn.h> | 7 #include <dlfcn.h> |
| 8 #include "chrome/browser/ui/base_window.h" | 8 #include "chrome/browser/ui/base_window.h" |
| 9 #include "content/public/browser/render_view_host.h" | 9 #include "content/public/browser/render_view_host.h" |
| 10 #include "content/public/browser/web_contents.h" | 10 #include "content/public/browser/web_contents.h" |
| 11 #include "content/public/browser/web_contents_view.h" |
| 11 | 12 |
| 12 using content::RenderWidgetHost; | 13 using content::RenderWidgetHost; |
| 13 using content::WebContents; | 14 using content::WebContents; |
| 14 | 15 |
| 15 namespace gtk_window_util { | 16 namespace gtk_window_util { |
| 16 | 17 |
| 17 // Keep track of the last click time and the last click position so we can | 18 // Keep track of the last click time and the last click position so we can |
| 18 // filter out extra GDK_BUTTON_PRESS events when a double click happens. | 19 // filter out extra GDK_BUTTON_PRESS events when a double click happens. |
| 19 static guint32 last_click_time; | 20 static guint32 last_click_time; |
| 20 static int last_click_x; | 21 static int last_click_x; |
| 21 static int last_click_y; | 22 static int last_click_y; |
| 22 | 23 |
| 23 // Performs Cut/Copy/Paste operation on the |window|. | 24 // Performs Cut/Copy/Paste operation on the |window|. |
| 24 // If the current render view is focused, then just call the specified |method| | 25 // If the current render view is focused, then just call the specified |method| |
| 25 // against the current render view host, otherwise emit the specified |signal| | 26 // against the current render view host, otherwise emit the specified |signal| |
| 26 // against the focused widget. | 27 // against the focused widget. |
| 27 // TODO(suzhe): This approach does not work for plugins. | 28 // TODO(suzhe): This approach does not work for plugins. |
| 28 void DoCutCopyPaste(GtkWindow* window, | 29 void DoCutCopyPaste(GtkWindow* window, |
| 29 WebContents* web_contents, | 30 WebContents* web_contents, |
| 30 void (RenderWidgetHost::*method)(), | 31 void (RenderWidgetHost::*method)(), |
| 31 const char* signal) { | 32 const char* signal) { |
| 32 GtkWidget* widget = gtk_window_get_focus(window); | 33 GtkWidget* widget = gtk_window_get_focus(window); |
| 33 if (widget == NULL) | 34 if (widget == NULL) |
| 34 return; // Do nothing if no focused widget. | 35 return; // Do nothing if no focused widget. |
| 35 | 36 |
| 36 if (web_contents && widget == web_contents->GetContentNativeView()) { | 37 if (web_contents && |
| 38 widget == web_contents->GetView()->GetContentNativeView()) { |
| 37 (web_contents->GetRenderViewHost()->*method)(); | 39 (web_contents->GetRenderViewHost()->*method)(); |
| 38 } else { | 40 } else { |
| 39 guint id; | 41 guint id; |
| 40 if ((id = g_signal_lookup(signal, G_OBJECT_TYPE(widget))) != 0) | 42 if ((id = g_signal_lookup(signal, G_OBJECT_TYPE(widget))) != 0) |
| 41 g_signal_emit(widget, id, 0); | 43 g_signal_emit(widget, id, 0); |
| 42 } | 44 } |
| 43 } | 45 } |
| 44 | 46 |
| 45 void DoCut(GtkWindow* window, WebContents* web_contents) { | 47 void DoCut(GtkWindow* window, WebContents* web_contents) { |
| 46 DoCutCopyPaste(window, web_contents, | 48 DoCutCopyPaste(window, web_contents, |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 gfx::Rect* bounds, | 248 gfx::Rect* bounds, |
| 247 gfx::Rect* restored_bounds) { | 249 gfx::Rect* restored_bounds) { |
| 248 gint x, y; | 250 gint x, y; |
| 249 gtk_window_get_position(window->GetNativeWindow(), &x, &y); | 251 gtk_window_get_position(window->GetNativeWindow(), &x, &y); |
| 250 (*bounds).set_origin(gfx::Point(x, y)); | 252 (*bounds).set_origin(gfx::Point(x, y)); |
| 251 if (!window->IsFullscreen() && !window->IsMaximized()) | 253 if (!window->IsFullscreen() && !window->IsMaximized()) |
| 252 *restored_bounds = *bounds; | 254 *restored_bounds = *bounds; |
| 253 } | 255 } |
| 254 | 256 |
| 255 } // namespace gtk_window_util | 257 } // namespace gtk_window_util |
| OLD | NEW |