Hello community, here is the log from the commit of package awesome for openSUSE:Factory checked in at 2016-03-31 13:03:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/awesome (Old) and /work/SRC/openSUSE:Factory/.awesome.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "awesome" Changes: -------- --- /work/SRC/openSUSE:Factory/awesome/awesome.changes 2016-02-01 19:57:15.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.awesome.new/awesome.changes 2016-03-31 13:03:49.000000000 +0200 @@ -1,0 +2,14 @@ +Tue Mar 22 13:20:10 UTC 2016 - kmroz@suse.com + +- Update to 3.5.9: + - Always send ConfigureNotifies + - Don't modify WM_HINTS in client_set_urgent() + - Fix awful.ewmh to handle window gravities + - Check that the Lua stack is empty in the main loop + - Fix unbalance Lua stack usage in event_handle_leavenotify() + - Balance the stack in luaA_loadrc() + - Fix arguments to luaL_checkstack() + - Make client key bindings for e.g. xeyes work again + - Change codename + +------------------------------------------------------------------- Old: ---- awesome-3.5.8.tar.xz New: ---- awesome-3.5.9.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ awesome.spec ++++++ --- /var/tmp/diff_new_pack.K6Dgvm/_old 2016-03-31 13:03:50.000000000 +0200 +++ /var/tmp/diff_new_pack.K6Dgvm/_new 2016-03-31 13:03:50.000000000 +0200 @@ -18,7 +18,7 @@ %define _version 3.5 Name: awesome -Version: 3.5.8 +Version: 3.5.9 Release: 0 Summary: Highly configurable tiling and floating Window Manager License: GPL-2.0+ ++++++ awesome-3.5.8.tar.xz -> awesome-3.5.9.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/.version_stamp new/awesome-3.5.9/.version_stamp --- old/awesome-3.5.8/.version_stamp 2016-01-30 14:57:02.000000000 +0100 +++ new/awesome-3.5.9/.version_stamp 2016-03-06 15:11:57.000000000 +0100 @@ -1 +1 @@ -v3.5.8 \ No newline at end of file +v3.5.9 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/awesome.c new/awesome-3.5.9/awesome.c --- old/awesome-3.5.8/awesome.c 2016-01-30 14:55:18.000000000 +0100 +++ new/awesome-3.5.9/awesome.c 2016-03-06 15:05:54.000000000 +0100 @@ -285,6 +285,13 @@ /* Do all deferred work now */ awesome_refresh(); + /* Check if the Lua stack is the way it should be */ + if (lua_gettop(globalconf.L) != 0) { + warn("Something was left on the Lua stack, this is a bug!"); + luaA_dumpstack(globalconf.L); + lua_settop(globalconf.L, 0); + } + /* Check how long this main loop iteration took */ gettimeofday(&now, NULL); timersub(&now, &last_wakeup, &length_time); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/awesomeConfig.cmake new/awesome-3.5.9/awesomeConfig.cmake --- old/awesome-3.5.8/awesomeConfig.cmake 2016-01-30 14:55:18.000000000 +0100 +++ new/awesome-3.5.9/awesomeConfig.cmake 2016-03-06 15:05:54.000000000 +0100 @@ -4,7 +4,7 @@ # `git describe` later. set(VERSION devel) -set(CODENAME "Major Tom") +set(CODENAME "Mighty Ravendark") project(${PROJECT_AWE_NAME} C) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/common/luaobject.c new/awesome-3.5.9/common/luaobject.c --- old/awesome-3.5.8/common/luaobject.c 2016-01-30 14:55:18.000000000 +0100 +++ new/awesome-3.5.9/common/luaobject.c 2016-03-06 15:05:54.000000000 +0100 @@ -218,7 +218,7 @@ if(sigfound) { int nbfunc = sigfound->sigfuncs.len; - luaL_checkstack(L, lua_gettop(L) + nbfunc + nargs + 1, "too much signal"); + luaL_checkstack(L, nbfunc + nargs + 1, "too much signal"); /* Push all functions and then execute, because this list can change * while executing funcs. */ foreach(func, sigfound->sigfuncs) @@ -263,7 +263,7 @@ if(sigfound) { int nbfunc = sigfound->sigfuncs.len; - luaL_checkstack(L, lua_gettop(L) + nbfunc + nargs + 2, "too much signal"); + luaL_checkstack(L, nbfunc + nargs + 2, "too much signal"); /* Push all functions and then execute, because this list can change * while executing funcs. */ foreach(func, sigfound->sigfuncs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/event.c new/awesome-3.5.9/event.c --- old/awesome-3.5.8/event.c 2016-01-30 14:55:18.000000000 +0100 +++ new/awesome-3.5.9/event.c 2016-03-06 15:05:54.000000000 +0100 @@ -507,6 +507,7 @@ { luaA_object_push(globalconf.L, c); luaA_object_emit_signal(globalconf.L, -1, "mouse::leave", 0); + lua_pop(globalconf.L, 1); } lua_pushnil(globalconf.L); @@ -644,7 +645,7 @@ /* get keysym ignoring all modifiers */ xcb_keysym_t keysym = keyresolv_get_keysym(ev->detail, 0); client_t *c; - if((c = client_getbywin(ev->event))) + if((c = client_getbywin(ev->event)) || (c = client_getbynofocuswin(ev->event))) { luaA_object_push(globalconf.L, c); event_key_callback(ev, &c->keys, -1, 1, &keysym); @@ -835,6 +836,8 @@ client_t *c = *_c; xcb_ungrab_key(globalconf.connection, XCB_GRAB_ANY, c->window, XCB_BUTTON_MASK_ANY); xwindow_grabkeys(c->window, &c->keys); + if (c->nofocus_window) + xwindow_grabkeys(c->nofocus_window, &c->keys); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/lib/awful/ewmh.lua.in new/awesome-3.5.9/lib/awful/ewmh.lua.in --- old/awesome-3.5.8/lib/awful/ewmh.lua.in 2016-01-30 14:55:18.000000000 +0100 +++ new/awesome-3.5.9/lib/awful/ewmh.lua.in 2016-03-06 15:05:54.000000000 +0100 @@ -66,11 +66,11 @@ store_geometry(window, "fullscreen") data[window].fullscreen.border_width = window.border_width local g = screen[window.screen].geometry - window:geometry(screen[window.screen].geometry) window.border_width = 0 + window:geometry(screen[window.screen].geometry) elseif data[window] and data[window].fullscreen then - window:geometry(data[window].fullscreen) window.border_width = data[window].fullscreen.border_width + window:geometry(data[window].fullscreen) end end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/luaa.c new/awesome-3.5.9/luaa.c --- old/awesome-3.5.8/luaa.c 2016-01-30 14:55:18.000000000 +0100 +++ new/awesome-3.5.9/luaa.c 2016-03-06 15:05:54.000000000 +0100 @@ -498,40 +498,41 @@ static bool luaA_loadrc(const char *confpath, bool run) { - if(!luaL_loadfile(globalconf.L, confpath)) - { - if(run) - { - /* Set the conffile right now so it can be used inside the - * configuration file. */ - conffile = a_strdup(confpath); - /* Move error handling function before function */ - lua_pushcfunction(globalconf.L, luaA_dofunction_on_error); - lua_insert(globalconf.L, -2); - if(lua_pcall(globalconf.L, 0, LUA_MULTRET, -2)) - { - const char *err = lua_tostring(globalconf.L, -1); - luaA_startup_error(err); - fprintf(stderr, "%s\n", err); - /* An error happened, so reset this. */ - conffile = NULL; - } - else - return true; - } - else - { - lua_pop(globalconf.L, 1); - return true; - } - } - else + if(luaL_loadfile(globalconf.L, confpath)) { const char *err = lua_tostring(globalconf.L, -1); luaA_startup_error(err); fprintf(stderr, "%s\n", err); + return false; + } + + if(!run) + { + lua_pop(globalconf.L, 1); + return true; } + /* Set the conffile right now so it can be used inside the + * configuration file. */ + conffile = a_strdup(confpath); + /* Move error handling function before function */ + lua_pushcfunction(globalconf.L, luaA_dofunction_on_error); + lua_insert(globalconf.L, -2); + if(!lua_pcall(globalconf.L, 0, 0, -2)) + { + /* Pop luaA_dofunction_on_error */ + lua_pop(globalconf.L, 1); + return true; + } + + const char *err = lua_tostring(globalconf.L, -1); + luaA_startup_error(err); + fprintf(stderr, "%s\n", err); + /* An error happened, so reset this. */ + conffile = NULL; + /* Pop luaA_dofunction_on_error() and the error message */ + lua_pop(globalconf.L, 2); + return false; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/objects/client.c new/awesome-3.5.9/objects/client.c --- old/awesome-3.5.8/objects/client.c 2016-01-30 14:55:18.000000000 +0100 +++ new/awesome-3.5.9/objects/client.c 2016-03-06 15:05:54.000000000 +0100 @@ -71,22 +71,8 @@ if(c->urgent != urgent) { - xcb_get_property_cookie_t hints = - xcb_icccm_get_wm_hints_unchecked(globalconf.connection, c->window); - c->urgent = urgent; - /* update ICCCM hints */ - xcb_icccm_wm_hints_t wmh; - xcb_icccm_get_wm_hints_reply(globalconf.connection, hints, &wmh, NULL); - - if(urgent) - wmh.flags |= XCB_ICCCM_WM_HINT_X_URGENCY; - else - wmh.flags &= ~XCB_ICCCM_WM_HINT_X_URGENCY; - - xcb_icccm_set_wm_hints(globalconf.connection, c->window, &wmh); - luaA_object_emit_signal(L, cidx, "property::urgent", 0); } } @@ -178,6 +164,16 @@ return NULL; } +client_t * +client_getbynofocuswin(xcb_window_t w) +{ + foreach(c, globalconf.clients) + if((*c)->nofocus_window == w) + return *c; + + return NULL; +} + /** Get a client by its frame window. * \param w The client window to find. * \return A client pointer if found, NULL otherwise. @@ -340,6 +336,20 @@ globalconf.focus.need_update = true; } +static xcb_window_t +client_get_nofocus_window(client_t *c) +{ + if (c->nofocus_window == XCB_NONE) { + c->nofocus_window = xcb_generate_id(globalconf.connection); + xcb_create_window(globalconf.connection, globalconf.default_depth, c->nofocus_window, c->frame_window, + -2, -2, 1, 1, 0, XCB_COPY_FROM_PARENT, globalconf.visual->visual_id, + 0, NULL); + xcb_map_window(globalconf.connection, c->nofocus_window); + xwindow_grabkeys(c->nofocus_window, &c->keys); + } + return c->nofocus_window; +} + void client_focus_refresh(void) { @@ -358,11 +368,7 @@ if(!c->nofocus) win = c->window; else - /* Move the focus away from whatever has it to make sure the - * previously focused client doesn't get any input in case - * WM_TAKE_FOCUS gets ignored. - */ - win = globalconf.focus.window_no_focus; + win = client_get_nofocus_window(c); if(client_hasproto(c, WM_TAKE_FOCUS)) xwindow_takefocus(c->window); @@ -741,12 +747,17 @@ bool send_notice = force_notice; bool hide_titlebars = c->fullscreen; screen_t *new_screen = screen_getbycoord(geometry.x, geometry.y); + bool java_is_broken = true; if (honor_hints) geometry = client_apply_size_hints(c, geometry); if(c->geometry.width == geometry.width && c->geometry.height == geometry.height) + /* We are moving without changing the size, see ICCCM 4.2.3 */ + send_notice = true; + if(java_is_broken) + /* Java strong. Java Hulk. Java make own rules! */ send_notice = true; /* Also store geometry including border */ @@ -779,7 +790,6 @@ (uint32_t[]) { real_geometry.x, real_geometry.y, real_geometry.width, real_geometry.height }); if(send_notice) - /* We are moving without changing the size, see ICCCM 4.2.3 */ client_send_configure(c); client_restore_enterleave_events(); @@ -1236,6 +1246,8 @@ /* Ignore all spurious enter/leave notify events */ client_ignore_enterleave_events(); + if (c->nofocus_window != XCB_NONE) + xcb_destroy_window(globalconf.connection, c->nofocus_window); xcb_destroy_window(globalconf.connection, c->frame_window); client_restore_enterleave_events(); @@ -2285,6 +2297,8 @@ luaA_object_emit_signal(L, 1, "property::keys", 0); xcb_ungrab_key(globalconf.connection, XCB_GRAB_ANY, c->window, XCB_BUTTON_MASK_ANY); xwindow_grabkeys(c->window, keys); + if (c->nofocus_window) + xwindow_grabkeys(c->nofocus_window, &c->keys); } return luaA_key_array_get(L, 1, keys); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/awesome-3.5.8/objects/client.h new/awesome-3.5.9/objects/client.h --- old/awesome-3.5.8/objects/client.h 2016-01-30 14:55:18.000000000 +0100 +++ new/awesome-3.5.9/objects/client.h 2016-03-06 15:05:54.000000000 +0100 @@ -56,6 +56,8 @@ struct client_t { WINDOW_OBJECT_HEADER + /** Window we use for input focus and no-input clients */ + xcb_window_t nofocus_window; /** Client logical screen */ screen_t *screen; /** Client name */ @@ -137,6 +139,7 @@ bool client_maybevisible(client_t *); client_t * client_getbywin(xcb_window_t); +client_t * client_getbynofocuswin(xcb_window_t); client_t * client_getbyframewin(xcb_window_t); void client_ban(client_t *);
participants (1)
-
root@hilbert.suse.de