diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-18 22:45:28 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-18 22:45:28 +0000 |
commit | 58f8a6595678f5c84d6f40a1ce4ad0ab0aaa8f8c (patch) | |
tree | 82f3dd0bb354a6cbe1c7d8ef3cab2a6e932e1462 | |
parent | 4ce7b6b184846ebaa3f1ca9b7c084c493976e9c6 (diff) | |
download | chromium_src-58f8a6595678f5c84d6f40a1ce4ad0ab0aaa8f8c.zip chromium_src-58f8a6595678f5c84d6f40a1ce4ad0ab0aaa8f8c.tar.gz chromium_src-58f8a6595678f5c84d6f40a1ce4ad0ab0aaa8f8c.tar.bz2 |
Adds SendMessage to TransitionTypes.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/131052
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18761 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/views/tabs/tab_overview_types.cc | 23 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab_overview_types.h | 7 |
2 files changed, 30 insertions, 0 deletions
diff --git a/chrome/browser/views/tabs/tab_overview_types.cc b/chrome/browser/views/tabs/tab_overview_types.cc index ee39362..28ab42c8 100644 --- a/chrome/browser/views/tabs/tab_overview_types.cc +++ b/chrome/browser/views/tabs/tab_overview_types.cc @@ -89,6 +89,27 @@ bool TabOverviewTypes::SetWindowType( type_to_atom_[ATOM_CHROME_WINDOW_TYPE], values); } +void TabOverviewTypes::SendMessage(const Message& msg) { + XEvent e; + e.xclient.type = ClientMessage; + e.xclient.window = wm_; + e.xclient.message_type = type_to_atom_[ATOM_CHROME_WM_MESSAGE]; + e.xclient.format = 32; // 32-bit values + e.xclient.data.l[0] = msg.type(); + + // XClientMessageEvent only gives us five 32-bit items, and we're using + // the first one for our message type. + DCHECK_LE(msg.max_params(), 4); + for (int i = 0; i < msg.max_params(); ++i) + e.xclient.data.l[i+1] = msg.param(i); + + XSendEvent(x11_util::GetXDisplay(), + wm_, + False, // propagate + 0, // empty event mask + &e); +} + bool TabOverviewTypes::DecodeMessage(const GdkEventClient& event, Message* msg) { if (wm_message_atom_ != gdk_x11_atom_to_xatom(event.message_type)) @@ -136,4 +157,6 @@ TabOverviewTypes::TabOverviewTypes() { } wm_message_atom_ = type_to_atom_[ATOM_CHROME_WM_MESSAGE]; + + wm_ = XGetSelectionOwner(x11_util::GetXDisplay(), type_to_atom_[ATOM_WM_S0]); } diff --git a/chrome/browser/views/tabs/tab_overview_types.h b/chrome/browser/views/tabs/tab_overview_types.h index eff20e8..3f255a5 100644 --- a/chrome/browser/views/tabs/tab_overview_types.h +++ b/chrome/browser/views/tabs/tab_overview_types.h @@ -14,6 +14,7 @@ #include "base/singleton.h" typedef unsigned long Atom; +typedef unsigned long XID; // TODO(sky): move and rename. class TabOverviewTypes { @@ -176,6 +177,9 @@ class TabOverviewTypes { WindowType type, const std::vector<int>* params); + // Sends a message to the WM. + void SendMessage(const Message& msg); + // If |event| is a valid Message it is decoded into |msg| and true is // returned. If false is returned, |event| is not a valid Message. bool DecodeMessage(const GdkEventClient& event, Message* msg); @@ -195,6 +199,9 @@ class TabOverviewTypes { // Cached value of type_to_atom_[ATOM_CHROME_WM_MESSAGE]. Atom wm_message_atom_; + // Handle to the wm. Used for sending messages. + XID wm_; + DISALLOW_COPY_AND_ASSIGN(TabOverviewTypes); }; |