all repos — openbox @ ccb58d37ee5539271c3595ed7b72a461434f428d

openbox fork - make it a bit more like ryudo

adjust to the new format for otk::Proeprty::get() functions (no nelements)
let the user specify if it is a 'final' move for a window or not, and the client will only be sent a ConfigureNotify if it is.
Dana Jansens danakj@orodu.net
commit

ccb58d37ee5539271c3595ed7b72a461434f428d

parent

232092fa2105fd001dbddfb6d5b536e215ca3346

2 files changed, 38 insertions(+), 30 deletions(-)

jump to
M src/client.ccsrc/client.cc

@@ -167,7 +167,7 @@ {

_type = (WindowType) -1; unsigned long *val; - unsigned long num = (unsigned) -1; + unsigned long num; if (otk::Property::get(_window, otk::Property::atoms.net_wm_window_type, otk::Property::atoms.atom, &num, &val)) { // use the first value that we know about in the array

@@ -372,7 +372,7 @@ _modal = _shaded = _max_horz = _max_vert = _fullscreen = _above = _below =

_iconic = _skip_taskbar = _skip_pager = false; unsigned long *state; - unsigned long num = (unsigned) -1; + unsigned long num; if (otk::Property::get(_window, otk::Property::atoms.net_wm_state, otk::Property::atoms.atom, &num, &state)) {

@@ -717,7 +717,7 @@ }

void Client::updateIcons() { - unsigned long num = (unsigned) -1; + unsigned long num; unsigned long *data; unsigned long w, h, i = 0;

@@ -775,7 +775,7 @@ unsigned long num = 2;

Pixmap *data; if (otk::Property::get(_window, otk::Property::atoms.kwm_win_icon, otk::Property::atoms.kwm_win_icon, &num, &data)) { - if (num >= 2) { + if (num == 2) { _pixmap_icon = data[0]; _pixmap_icon_mask = data[1]; }

@@ -1283,15 +1283,15 @@ return &_icons[si];

return &_icons[li]; } -void Client::move(int x, int y) +void Client::move(int x, int y, bool final) { if (!(_functions & Func_Move)) return; frame->frameGravity(x, y); // get the client's position based on x,y for the // frame - internal_move(x, y); + internal_move(x, y, final); } -void Client::internal_move(int x, int y) +void Client::internal_move(int x, int y, bool final) { _area = otk::Rect(otk::Point(x, y), _area.size());

@@ -1301,28 +1301,30 @@ frame->adjustPosition();

// send synthetic configure notify (we don't need to if we aren't mapped // yet) - XEvent event; - event.type = ConfigureNotify; - event.xconfigure.display = **otk::display; - event.xconfigure.event = _window; - event.xconfigure.window = _window; + if (final) { + XEvent event; + event.type = ConfigureNotify; + event.xconfigure.display = **otk::display; + event.xconfigure.event = _window; + event.xconfigure.window = _window; - // root window coords with border in mind - event.xconfigure.x = x - _border_width + frame->size().left; - event.xconfigure.y = y - _border_width + frame->size().top; + // root window coords with border in mind + event.xconfigure.x = x - _border_width + frame->size().left; + event.xconfigure.y = y - _border_width + frame->size().top; - event.xconfigure.width = _area.width(); - event.xconfigure.height = _area.height(); - event.xconfigure.border_width = _border_width; - event.xconfigure.above = frame->plate(); - event.xconfigure.override_redirect = False; - XSendEvent(event.xconfigure.display, event.xconfigure.window, False, - StructureNotifyMask, &event); + event.xconfigure.width = _area.width(); + event.xconfigure.height = _area.height(); + event.xconfigure.border_width = _border_width; + event.xconfigure.above = frame->plate(); + event.xconfigure.override_redirect = False; + XSendEvent(event.xconfigure.display, event.xconfigure.window, False, + StructureNotifyMask, &event); #if 0//def DEBUG - printf("Sent synthetic ConfigureNotify %d,%d %d,%d to 0x%lx\n", - event.xconfigure.x, event.xconfigure.y, event.xconfigure.width, - event.xconfigure.height, event.xconfigure.window); + printf("Sent synthetic ConfigureNotify %d,%d %d,%d to 0x%lx\n", + event.xconfigure.x, event.xconfigure.y, event.xconfigure.width, + event.xconfigure.height, event.xconfigure.window); #endif + } } }

@@ -1541,7 +1543,7 @@ // already maxed on

if (otk::Property::get(_window, otk::Property::atoms.openbox_premax, otk::Property::atoms.cardinal, &n, (long unsigned**) &readdim)) { - if (n >= 4) { + if (n == 4) { if (_max_horz) { dimensions[0] = readdim[0]; dimensions[2] = readdim[2];

@@ -1573,7 +1575,7 @@

if (otk::Property::get(_window, otk::Property::atoms.openbox_premax, otk::Property::atoms.cardinal, &n, (long unsigned**) &dimensions)) { - if (n >= 4) { + if (n == 4) { if (dir == 0 || dir == 1) { // horz x = (signed int)dimensions[0]; w = (signed int)dimensions[2];

@@ -1656,7 +1658,7 @@

if (otk::Property::get(_window, otk::Property::atoms.openbox_premax, otk::Property::atoms.cardinal, &n, (long unsigned**) &dimensions)) { - if (n >= 4) { + if (n == 4) { x = dimensions[0]; y = dimensions[1]; w = dimensions[2];
M src/client.hhsrc/client.hh

@@ -478,8 +478,11 @@ //! Internal version of the Client::move function

/*! @param x The X coordinate to move to. @param y The Y coordinate to move to. + @param final true if this is the final move, false if there are more move + events coming. The client is not notified of the move when + final is false. */ - void internal_move(int x, int y); + void internal_move(int x, int y, bool final = true); //! Internal version of the Client::resize function /*! This also maintains things like the client's minsize, and size increments.

@@ -674,8 +677,11 @@ This moves the window so that the top-left corner of its frame will be at

the position specified. @param x The X coordinate to move to. @param y The Y coordinate to move to. + @param final true if this is the final move, false if there are more move + events coming. The client is not notified of the move when + final is false. */ - void move(int x, int y); + void move(int x, int y, bool final = true); //! Resizes the client window, anchoring it in a given corner /*!