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

Unified Diff: ui/base/test/ui_controls_gtk.cc

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT Created 6 years, 8 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: ui/base/test/ui_controls_gtk.cc
diff --git a/ui/base/test/ui_controls_gtk.cc b/ui/base/test/ui_controls_gtk.cc
deleted file mode 100644
index 3342a3df99c0f55013cb21e85ee15cebc274ffad..0000000000000000000000000000000000000000
--- a/ui/base/test/ui_controls_gtk.cc
+++ /dev/null
@@ -1,261 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/base/test/ui_controls.h"
-
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/message_loop/message_loop.h"
-#include "ui/base/gtk/event_synthesis_gtk.h"
-#include "ui/base/gtk/gtk_screen_util.h"
-#include "ui/gfx/rect.h"
-
-namespace {
-bool g_ui_controls_enabled = false;
-
-// static
-guint32 XTimeNow() {
- struct timespec ts;
- clock_gettime(CLOCK_MONOTONIC, &ts);
- return ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
-}
-
-class EventWaiter : public base::MessageLoopForUI::Observer {
- public:
- EventWaiter(const base::Closure& task, GdkEventType type, int count)
- : task_(task),
- type_(type),
- count_(count) {
- base::MessageLoopForUI::current()->AddObserver(this);
- }
-
- virtual ~EventWaiter() {
- base::MessageLoopForUI::current()->RemoveObserver(this);
- }
-
- // MessageLoop::Observer implementation:
- virtual void WillProcessEvent(GdkEvent* event) OVERRIDE {
- if ((event->type == type_) && (--count_ == 0)) {
- // At the time we're invoked the event has not actually been processed.
- // Use PostTask to make sure the event has been processed before
- // notifying.
- // NOTE: if processing a message results in running a nested message
- // loop, then DidProcessEvent isn't immediately sent. As such, we do
- // the processing in WillProcessEvent rather than DidProcessEvent.
- base::MessageLoop::current()->PostTask(FROM_HERE, task_);
- delete this;
- }
- }
-
- virtual void DidProcessEvent(GdkEvent* event) OVERRIDE {
- // No-op.
- }
-
- private:
- base::Closure task_;
- GdkEventType type_;
- // The number of events of this type to wait for.
- int count_;
-};
-
-void FakeAMouseMotionEvent(gint x, gint y) {
- GdkEvent* event = gdk_event_new(GDK_MOTION_NOTIFY);
-
- event->motion.send_event = false;
- event->motion.time = XTimeNow();
-
- GtkWidget* grab_widget = gtk_grab_get_current();
- if (grab_widget) {
- // If there is a grab, we need to target all events at it regardless of
- // what widget the mouse is over.
- event->motion.window = gtk_widget_get_window(grab_widget);
- } else {
- event->motion.window = gdk_window_at_pointer(&x, &y);
- }
- g_object_ref(event->motion.window);
- gint window_x, window_y;
- gdk_window_get_origin(event->motion.window, &window_x, &window_y);
- event->motion.x = x - window_x;
- event->motion.y = y - window_y;
- event->motion.x_root = x;
- event->motion.y_root = y;
-
- event->motion.device = gdk_device_get_core_pointer();
- event->type = GDK_MOTION_NOTIFY;
-
- gdk_event_put(event);
- gdk_event_free(event);
-}
-
-} // namespace
-
-namespace ui_controls {
-
-void EnableUIControls() {
- g_ui_controls_enabled = true;
-}
-
-bool SendKeyPress(gfx::NativeWindow window,
- ui::KeyboardCode key,
- bool control,
- bool shift,
- bool alt,
- bool command) {
- CHECK(g_ui_controls_enabled);
- DCHECK(!command); // No command key on Linux
- GdkWindow* event_window = NULL;
- GtkWidget* grab_widget = gtk_grab_get_current();
- if (grab_widget) {
- // If there is a grab, send all events to the grabbed widget.
- event_window = gtk_widget_get_window(grab_widget);
- } else if (window) {
- event_window = gtk_widget_get_window(GTK_WIDGET(window));
- } else {
- // No target was specified. Send the events to the active toplevel.
- GList* windows = gtk_window_list_toplevels();
- for (GList* element = windows; element; element = g_list_next(element)) {
- GtkWindow* this_window = GTK_WINDOW(element->data);
- if (gtk_window_is_active(this_window)) {
- event_window = gtk_widget_get_window(GTK_WIDGET(this_window));
- break;
- }
- }
- g_list_free(windows);
- }
- if (!event_window) {
- NOTREACHED() << "Window not specified and none is active";
- return false;
- }
-
- std::vector<GdkEvent*> events;
- ui::SynthesizeKeyPressEvents(event_window, key, control, shift, alt, &events);
- for (std::vector<GdkEvent*>::iterator iter = events.begin();
- iter != events.end(); ++iter) {
- gdk_event_put(*iter);
- // gdk_event_put appends a copy of the event.
- gdk_event_free(*iter);
- }
-
- return true;
-}
-
-bool SendKeyPressNotifyWhenDone(gfx::NativeWindow window,
- ui::KeyboardCode key,
- bool control,
- bool shift,
- bool alt,
- bool command,
- const base::Closure& task) {
- CHECK(g_ui_controls_enabled);
- DCHECK(!command); // No command key on Linux
- int release_count = 1;
- if (control)
- release_count++;
- if (shift)
- release_count++;
- if (alt)
- release_count++;
- // This object will delete itself after running |task|.
- new EventWaiter(task, GDK_KEY_RELEASE, release_count);
- return SendKeyPress(window, key, control, shift, alt, command);
-}
-
-bool SendMouseMove(long x, long y) {
- CHECK(g_ui_controls_enabled);
- gdk_display_warp_pointer(gdk_display_get_default(), gdk_screen_get_default(),
- x, y);
- // Sometimes gdk_display_warp_pointer fails to send back any indication of
- // the move, even though it succesfully moves the server cursor. We fake it in
- // order to get drags to work.
- FakeAMouseMotionEvent(x, y);
- return true;
-}
-
-bool SendMouseMoveNotifyWhenDone(long x, long y, const base::Closure& task) {
- CHECK(g_ui_controls_enabled);
- bool rv = SendMouseMove(x, y);
- new EventWaiter(task, GDK_MOTION_NOTIFY, 1);
- return rv;
-}
-
-bool SendMouseEvents(MouseButton type, int state) {
- CHECK(g_ui_controls_enabled);
- GdkEvent* event = gdk_event_new(GDK_BUTTON_PRESS);
-
- event->button.send_event = false;
- event->button.time = XTimeNow();
-
- gint x, y;
- GtkWidget* grab_widget = gtk_grab_get_current();
- if (grab_widget) {
- // If there is a grab, we need to target all events at it regardless of
- // what widget the mouse is over.
- event->button.window = gtk_widget_get_window(grab_widget);
- gdk_window_get_pointer(event->button.window, &x, &y, NULL);
- } else {
- event->button.window = gdk_window_at_pointer(&x, &y);
- CHECK(event->button.window);
- }
-
- g_object_ref(event->button.window);
- event->button.x = x;
- event->button.y = y;
- gint origin_x, origin_y;
- gdk_window_get_origin(event->button.window, &origin_x, &origin_y);
- event->button.x_root = x + origin_x;
- event->button.y_root = y + origin_y;
-
- event->button.axes = NULL;
- GdkModifierType modifier;
- gdk_window_get_pointer(event->button.window, NULL, NULL, &modifier);
- event->button.state = modifier;
- event->button.button = type == LEFT ? 1 : (type == MIDDLE ? 2 : 3);
- event->button.device = gdk_device_get_core_pointer();
-
- event->button.type = GDK_BUTTON_PRESS;
- if (state & DOWN)
- gdk_event_put(event);
-
- // Also send a release event.
- GdkEvent* release_event = gdk_event_copy(event);
- release_event->button.type = GDK_BUTTON_RELEASE;
- release_event->button.time++;
- if (state & UP)
- gdk_event_put(release_event);
-
- gdk_event_free(event);
- gdk_event_free(release_event);
-
- return false;
-}
-
-bool SendMouseEventsNotifyWhenDone(MouseButton type,
- int state,
- const base::Closure& task) {
- CHECK(g_ui_controls_enabled);
- bool rv = SendMouseEvents(type, state);
- GdkEventType wait_type;
- if (state & UP) {
- wait_type = GDK_BUTTON_RELEASE;
- } else {
- if (type == LEFT)
- wait_type = GDK_BUTTON_PRESS;
- else if (type == MIDDLE)
- wait_type = GDK_2BUTTON_PRESS;
- else
- wait_type = GDK_3BUTTON_PRESS;
- }
- new EventWaiter(task, wait_type, 1);
- return rv;
-}
-
-bool SendMouseClick(MouseButton type) {
- CHECK(g_ui_controls_enabled);
- return SendMouseEvents(type, UP | DOWN);
-}
-
-} // namespace ui_controls

Powered by Google App Engine
This is Rietveld 408576698