1 // Copyright (c) 2010 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/chromeos/browser_main_chromeos.h" 6 7 #include "base/lazy_instance.h" 8 #include "base/message_loop.h" 9 10 #include <gtk/gtk.h> 11 12 class MessageLoopObserver : public MessageLoopForUI::Observer { 13 virtual void WillProcessEvent(GdkEvent* event) { 14 // On chromeos we want to map Alt-left click to right click. 15 // This code only changes presses and releases. We could decide to also 16 // modify drags and crossings. It doesn't seem to be a problem right now 17 // with our support for context menus (the only real need we have). 18 // There are some inconsistent states both with what we have and what 19 // we would get if we added drags. You could get a right drag without a 20 // right down for example, unless we started synthesizing events, which 21 // seems like more trouble than it's worth. 22 if ((event->type == GDK_BUTTON_PRESS || 23 event->type == GDK_2BUTTON_PRESS || 24 event->type == GDK_3BUTTON_PRESS || 25 event->type == GDK_BUTTON_RELEASE) && 26 event->button.button == 1 && 27 event->button.state & GDK_MOD1_MASK) { 28 // Change the button to the third (right) one. 29 event->button.button = 3; 30 // Remove the Alt key and first button state. 31 event->button.state &= ~(GDK_MOD1_MASK | GDK_BUTTON1_MASK); 32 // Add the third (right) button state. 33 event->button.state |= GDK_BUTTON3_MASK; 34 } 35 } 36 37 virtual void DidProcessEvent(GdkEvent* event) { 38 } 39 }; 40 41 static base::LazyInstance<MessageLoopObserver> g_message_loop_observer( 42 base::LINKER_INITIALIZED); 43 44 void BrowserMainPartsChromeos::PostMainMessageLoopStart() { 45 BrowserMainPartsPosix::PostMainMessageLoopStart(); 46 MessageLoopForUI* message_loop = MessageLoopForUI::current(); 47 message_loop->AddObserver(g_message_loop_observer.Pointer()); 48 } 49 50 // static 51 BrowserMainParts* BrowserMainParts::CreateBrowserMainParts( 52 const MainFunctionParams& parameters) { 53 return new BrowserMainPartsChromeos(parameters); 54 } 55