Date: Wed, 11 Feb 2009 13:00:42 +1030 From: Benjamin Close <Benjamin.Close@clearchain.com> To: linimon@FreeBSD.org Cc: freebsd-ports-bugs@FreeBSD.org Subject: Re: ports/131309: sysutils/wmbluecpu: libxcb + wmbluecpu problem? Message-ID: <49923852.60503@clearchain.com> In-Reply-To: <200902022317.n12NHfW8050885@freefall.freebsd.org> References: <200902022317.n12NHfW8050885@freefall.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------050602090207060101060009 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 3/02/2009 9:47 AM, linimon@FreeBSD.org wrote: > Old Synopsis: libxcb + wmbluecpu problem? > New Synopsis: sysutils/wmbluecpu: libxcb + wmbluecpu problem? > > Responsible-Changed-From-To: freebsd-ports-bugs->benjsc > Responsible-Changed-By: linimon > Responsible-Changed-When: Mon Feb 2 23:16:45 UTC 2009 > Responsible-Changed-Why: > Fix synopsis and assign. > > http://www.freebsd.org/cgi/query-pr.cgi?pr=131309 > Attached Patch should fix the problem and should apply cleanly to the port. The cause is libxcb expecting the SIGALRM signal which is being caught by wmbluecpu. The way the program does the event loop is just wrong. Fix it and a number of other issues (SIGTERM/SIGQUIT, etc terminal handling). --------------050602090207060101060009 Content-Type: text/plain; name="20080211-wmbluecpu.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="20080211-wmbluecpu.patch" Index: Makefile =================================================================== RCS file: /devel/FreeBSD/cvs/ports/sysutils/wmbluecpu/Makefile,v retrieving revision 1.7 diff -u -r1.7 Makefile --- Makefile 23 Mar 2008 16:43:52 -0000 1.7 +++ Makefile 11 Feb 2009 02:14:19 -0000 @@ -7,7 +7,7 @@ PORTNAME= wmbluecpu PORTVERSION= 0.4 -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= sysutils windowmaker MASTER_SITES= ${MASTER_SITE_SUNSITE} MASTER_SITE_SUBDIR= X11/xutils Index: files/patch-dockapp.c =================================================================== RCS file: files/patch-dockapp.c diff -N files/patch-dockapp.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-dockapp.c 11 Feb 2009 02:13:10 -0000 @@ -0,0 +1,107 @@ +--- dockapp.c 2003-03-23 05:10:15.000000000 +1030 ++++ dockapp.c 2009-02-11 12:34:18.897651000 +1030 +@@ -238,9 +238,9 @@ + 32, PropModeReplace, (unsigned char *)&mwmhints, 5); + } + XMapWindow(display, mapwindow); +- signal(SIGINT, handle_signal); +- signal(SIGQUIT, handle_signal); +- signal(SIGTERM, handle_signal); ++ //signal(SIGINT, handle_signal); ++ //signal(SIGQUIT, handle_signal); ++ //signal(SIGTERM, handle_signal); + } + + void update_window() +@@ -253,42 +253,55 @@ + { + XEvent event; + int winx, winy; ++ fd_set fdset; ++ struct timeval timeout; + +- XNextEvent(display, &event); +- switch(event.type) +- { +- case Expose: +- update_window(); +- break; +- case ButtonPress: +- if(opt_window && (event.xbutton.button == 1)) +- { +- XDefineCursor(display, mapwindow, fleur); +- moving = 1; +- oldx = event.xbutton.x; +- oldy = event.xbutton.y; +- } +- break; +- case MotionNotify: +- winx = event.xmotion.x_root - oldx; +- winy = event.xmotion.y_root - oldy; +- if(winx < 0) winx = 0; +- if(winy < 0) winy = 0; +- if(winx > (screenwidth - WINDOW_WIDTH)) winx = screenwidth - WINDOW_WIDTH; +- if(winy > (screenheight - WINDOW_HEIGHT)) winy = screenheight - WINDOW_HEIGHT; +- if(moving) +- XMoveWindow(display, mapwindow, winx, winy); +- break; +- case ButtonRelease: +- if(opt_window) +- { +- moving = 0; +- XUndefineCursor(display, mapwindow); +- } +- break; +- case ClientMessage: +- if(event.xclient.data.l[0] == wm_delete_window) +- exitloop = 1; +- break; ++ FD_ZERO(&fdset); ++ FD_SET(ConnectionNumber(display), &fdset); ++ timeout.tv_usec = opt_timer_miliseconds % 1000; ++ timeout.tv_sec = opt_timer_miliseconds/1000; ++ ++ if( select(ConnectionNumber(display)+1, &fdset, NULL, NULL, &timeout) > 0 ){ ++ while( XPending( display )){ ++ XNextEvent(display, &event); ++ switch(event.type) ++ { ++ case Expose: ++ update_window(); ++ break; ++ case ButtonPress: ++ if(opt_window && (event.xbutton.button == 1)) ++ { ++ XDefineCursor(display, mapwindow, fleur); ++ moving = 1; ++ oldx = event.xbutton.x; ++ oldy = event.xbutton.y; ++ } ++ break; ++ case MotionNotify: ++ winx = event.xmotion.x_root - oldx; ++ winy = event.xmotion.y_root - oldy; ++ if(winx < 0) winx = 0; ++ if(winy < 0) winy = 0; ++ if(winx > (screenwidth - WINDOW_WIDTH)) winx = screenwidth - WINDOW_WIDTH; ++ if(winy > (screenheight - WINDOW_HEIGHT)) winy = screenheight - WINDOW_HEIGHT; ++ if(moving) ++ XMoveWindow(display, mapwindow, winx, winy); ++ break; ++ case ButtonRelease: ++ if(opt_window) ++ { ++ moving = 0; ++ XUndefineCursor(display, mapwindow); ++ } ++ break; ++ case ClientMessage: ++ if(event.xclient.data.l[0] == wm_delete_window) ++ exitloop = 1; ++ break; ++ } ++ } ++ } else { ++ handle_timer(SIGALRM); + } + } Index: files/patch-wmbluecpu.c =================================================================== RCS file: files/patch-wmbluecpu.c diff -N files/patch-wmbluecpu.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/patch-wmbluecpu.c 11 Feb 2009 02:12:55 -0000 @@ -0,0 +1,17 @@ +--- wmbluecpu.c 2003-03-17 12:02:13.000000000 +1030 ++++ wmbluecpu.c 2009-02-11 12:35:43.966803000 +1030 +@@ -32,12 +32,12 @@ + argv = varg; + parse_arguments(); + make_window(); +- start_timer(); ++ cpu_init(); ++ handle_timer(14); + while(!exitloop) + { + process_events(); + } +- stop_timer(); + free_stuff(); + return 0; + } --------------050602090207060101060009--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49923852.60503>