Skip site navigation (1)Skip section navigation (2)
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>