diff options
author | Richard Molitor <gattschardo@gmail.com> | 2015-11-14 23:53:02 +0100 |
---|---|---|
committer | Richard Molitor <gattschardo@gmail.com> | 2015-11-15 00:15:35 +0100 |
commit | cbf5046f8de5b420c734903c7a4a46e9e3897293 (patch) | |
tree | b48dc6a0359a285d2a0bfc3bed585a02d912cb48 | |
parent | 0d064e95e689698047fdb7e695d357e7e158a9fb (diff) |
events: also react to ConfigureNotify after mapping
-rw-r--r-- | src/events.c | 3 | ||||
-rw-r--r-- | src/events.h | 2 | ||||
-rw-r--r-- | src/winwidget.c | 10 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/events.c b/src/events.c index 2142408..876c7c4 100644 --- a/src/events.c +++ b/src/events.c @@ -41,7 +41,6 @@ feh_event_handler *ev_handler[LASTEvent]; static void feh_event_handle_ButtonPress(XEvent * ev); static void feh_event_handle_ButtonRelease(XEvent * ev); -static void feh_event_handle_ConfigureNotify(XEvent * ev); static void feh_event_handle_LeaveNotify(XEvent * ev); static void feh_event_handle_MotionNotify(XEvent * ev); static void feh_event_handle_ClientMessage(XEvent * ev); @@ -416,7 +415,7 @@ static void feh_event_handle_ButtonRelease(XEvent * ev) return; } -static void feh_event_handle_ConfigureNotify(XEvent * ev) +void feh_event_handle_ConfigureNotify(XEvent * ev) { while (XCheckTypedWindowEvent(disp, ev->xconfigure.window, ConfigureNotify, ev)); if (!menu_root) { diff --git a/src/events.h b/src/events.h index 195f268..f334c58 100644 --- a/src/events.h +++ b/src/events.h @@ -32,4 +32,6 @@ extern feh_event_handler *ev_handler[]; void feh_event_init(void); +void feh_event_handle_ConfigureNotify(XEvent * ev); + #endif diff --git a/src/winwidget.c b/src/winwidget.c index 8bf1dbb..7f0a0d9 100644 --- a/src/winwidget.c +++ b/src/winwidget.c @@ -28,6 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "filelist.h" #include "winwidget.h" #include "options.h" +#include "events.h" static void winwidget_unregister(winwidget win); static void winwidget_register(winwidget win); @@ -776,6 +777,15 @@ void winwidget_show(winwidget winwid) /* wait for the window to map */ D(("Waiting for window to map\n")); XMaskEvent(disp, StructureNotifyMask, &ev); + /* Unfortunately, StructureNotifyMask does not only mask + * the events of type MapNotify (which we want to mask here) + * but also such of type ConfigureNotify (and others, see + * https://tronche.com/gui/x/xlib/events/processing-overview.html), + * which should be handled, especially on tiling wm's. To + * remedy this, the handler is executed explicitly: + */ + if (ev.type == ConfigureNotify) + feh_event_handle_ConfigureNotify(&ev); D(("Window mapped\n")); winwid->visible = 1; } |