summaryrefslogtreecommitdiff
path: root/src/client.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-24 00:44:36 +0000
committerDana Jansens <danakj@orodu.net>2003-01-24 00:44:36 +0000
commitab2968b3a5d61e2dc6b0a64153a7abb0078ee442 (patch)
treeb2d178ac0ccfc1ae9edf12c653274829560c1d70 /src/client.cc
parent39f19f427b68058b00e17ac972c5d9dfbda8c2e0 (diff)
add an UrgentNotify callback type. fire it when a window becomes "urgent"
Diffstat (limited to 'src/client.cc')
-rw-r--r--src/client.cc25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/client.cc b/src/client.cc
index 80cc1a2c..473c37f8 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -8,6 +8,7 @@
#include "frame.hh"
#include "screen.hh"
#include "openbox.hh"
+#include "bindings.hh"
#include "otk/display.hh"
#include "otk/property.hh"
@@ -44,6 +45,8 @@ Client::Client(int screen, Window window)
_transient_for = 0;
// pick a layer to start from
_layer = Layer_Normal;
+ // default to not urgent
+ _urgent = false;
getArea();
getDesktop();
@@ -457,7 +460,7 @@ void Client::updateWMHints(bool initstate)
// assume a window takes input if it doesnt specify
_can_focus = true;
- _urgent = false;
+ bool ur = false;
if ((hints = XGetWMHints(**otk::display, _window)) != NULL) {
if (hints->flags & InputHint)
@@ -468,7 +471,7 @@ void Client::updateWMHints(bool initstate)
_iconic = hints->initial_state == IconicState;
if (hints->flags & XUrgencyHint)
- _urgent = true;
+ ur = true;
if (hints->flags & WindowGroupHint) {
if (hints->window_group != _group) {
@@ -481,6 +484,14 @@ void Client::updateWMHints(bool initstate)
XFree(hints);
}
+
+ if (ur != _urgent) {
+ _urgent = ur;
+ // fire the urgent callback if we're mapped, otherwise, wait until after
+ // we're mapped
+ if (_urgent && frame)
+ fireUrgent();
+ }
}
@@ -1174,6 +1185,8 @@ void Client::applyStartupState()
_shaded = false;
shade(true);
}
+ if (_urgent)
+ fireUrgent();
if (_max_vert); // XXX: incomplete
if (_max_horz); // XXX: incomplete
@@ -1186,6 +1199,14 @@ void Client::applyStartupState()
}
+void Client::fireUrgent()
+{
+ // call the python UrgentNotify callbacks
+ EventData data(_screen, this, EventUrgentNotify, 0);
+ openbox->bindings()->fireEvent(&data);
+}
+
+
void Client::shade(bool shade)
{
if (!(_functions & Func_Shade) || // can't