summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-18 22:45:28 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-18 22:45:28 +0000
commit58f8a6595678f5c84d6f40a1ce4ad0ab0aaa8f8c (patch)
tree82f3dd0bb354a6cbe1c7d8ef3cab2a6e932e1462
parent4ce7b6b184846ebaa3f1ca9b7c084c493976e9c6 (diff)
downloadchromium_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.cc23
-rw-r--r--chrome/browser/views/tabs/tab_overview_types.h7
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);
};