summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
Diffstat (limited to 'openbox')
-rw-r--r--openbox/client.c18
-rw-r--r--openbox/client.h5
-rw-r--r--openbox/event.c3
-rw-r--r--openbox/screen.c18
4 files changed, 32 insertions, 12 deletions
diff --git a/openbox/client.c b/openbox/client.c
index 08d316c4..4dad9882 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -49,7 +49,8 @@
#include <X11/Xutil.h>
/*! The event mask to grab on client windows */
-#define CLIENT_EVENTMASK (PropertyChangeMask | StructureNotifyMask)
+#define CLIENT_EVENTMASK (PropertyChangeMask | StructureNotifyMask | \
+ ColormapChangeMask)
#define CLIENT_NOPROPAGATEMASK (ButtonPressMask | ButtonReleaseMask | \
ButtonMotionMask)
@@ -75,6 +76,7 @@ static void client_get_shaped(ObClient *self);
static void client_get_mwm_hints(ObClient *self);
static void client_get_gravity(ObClient *self);
static void client_get_client_machine(ObClient *self);
+static void client_get_colormap(ObClient *self);
static void client_change_allowed_actions(ObClient *self);
static void client_change_state(ObClient *self);
static void client_change_wm_state(ObClient *self);
@@ -939,6 +941,7 @@ static void client_get_all(ObClient *self)
client_setup_decor_and_functions(self);
client_get_client_machine(self);
+ client_get_colormap(self);
client_update_title(self);
client_update_class(self);
client_update_sm_client_id(self);
@@ -1310,6 +1313,19 @@ static void client_get_gravity(ObClient *self)
self->gravity = wattrib.win_gravity;
}
+void client_get_colormap(ObClient *self)
+{
+ XWindowAttributes wa;
+
+ if (XGetWindowAttributes(ob_display, self->window, &wa))
+ client_update_colormap(self, wa.colormap);
+}
+
+void client_update_colormap(ObClient *self, Colormap colormap)
+{
+ self->colormap = colormap;
+}
+
void client_update_normal_hints(ObClient *self)
{
XSizeHints size;
diff --git a/openbox/client.h b/openbox/client.h
index 73596790..e9a13041 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -193,6 +193,9 @@ struct _ObClient
/*! Window decoration and functionality hints */
ObMwmHints mwmhints;
+
+ /*! The client's specified colormap */
+ Colormap colormap;
/*! Where to place the decorated window in relation to the undecorated
window */
@@ -543,6 +546,8 @@ void client_update_transient_for(ObClient *self);
/*! Update the protocols that the window supports and adjusts things if they
change */
void client_update_protocols(ObClient *self);
+/*! Updates the window's colormap */
+void client_update_colormap(ObClient *self, Colormap colormap);
/*! Updates the WMNormalHints and adjusts things if they change */
void client_update_normal_hints(ObClient *self);
diff --git a/openbox/event.c b/openbox/event.c
index 759c2e22..5a2fe05b 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -1175,6 +1175,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
else if (msgtype == prop_atoms.sm_client_id) {
client_update_sm_client_id(client);
}
+ case ColormapNotify:
+ client_update_colormap(client, e->xcolormap.colormap);
+ break;
default:
;
#ifdef SHAPE
diff --git a/openbox/screen.c b/openbox/screen.c
index 74b8e71d..587dc647 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -907,23 +907,19 @@ void screen_show_desktop(gboolean show)
void screen_install_colormap(ObClient *client, gboolean install)
{
- XWindowAttributes wa;
-
if (client == NULL) {
if (install)
XInstallColormap(RrDisplay(ob_rr_inst), RrColormap(ob_rr_inst));
else
XUninstallColormap(RrDisplay(ob_rr_inst), RrColormap(ob_rr_inst));
} else {
- if (XGetWindowAttributes(ob_display, client->window, &wa) &&
- wa.colormap != None) {
- xerror_set_ignore(TRUE);
- if (install)
- XInstallColormap(RrDisplay(ob_rr_inst), wa.colormap);
- else
- XUninstallColormap(RrDisplay(ob_rr_inst), wa.colormap);
- xerror_set_ignore(FALSE);
- }
+ xerror_set_ignore(TRUE);
+ if (install) {
+ if (client->colormap != None)
+ XInstallColormap(RrDisplay(ob_rr_inst), client->colormap);
+ } else
+ XUninstallColormap(RrDisplay(ob_rr_inst), client->colormap);
+ xerror_set_ignore(FALSE);
}
}