Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37427389
en ru br
Репозитории ALT
S:0.2-alt4
5.1: 0.2-alt3
4.1: 0.2-alt2
4.0: 0.2-alt2
3.0: 0.2-alt2
www.altlinux.org/Changes

Группа :: Графические оболочки/Window Maker
Пакет: wmMatrix

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: wmMatrix-0.2-alt4.patch
Скачать


 wmMatrix.c |  249 ++++++++++++-----------------------------------------------
 xutils.c   |   10 ++-
 xutils.h   |    3 +-
 3 files changed, 61 insertions(+), 201 deletions(-)
diff --git a/wmMatrix.c b/wmMatrix.c
index 10a3efb..bda7c0e 100644
--- a/wmMatrix.c
+++ b/wmMatrix.c
@@ -1,12 +1,12 @@
 /*
  *
  *  	wmMatrix-0.2 (C) 1999 Mike Henderson (mghenderson@lanl.gov)
- * 
+ *
  *  		- A DockApp version of Jamie Zawinski's xmatrix screensaver hack.
- *		  
- * 
- * 
- * 
+ *
+ *
+ *
+ *
  *
  * 	This program is free software; you can redistribute it and/or modify
  * 	it under the terms of the GNU General Public License as published by
@@ -39,11 +39,8 @@
  */
 
 
-
-
-
-/*  
- *   Includes  
+/*
+ *   Includes
  */
 #include <stdio.h>
 #include <unistd.h>
@@ -58,18 +55,13 @@
 #include "matrix.h"
 
 
-
-/* 
- *  Delay between refreshes (in microseconds) 
+/*
+ *  Delay between refreshes (in microseconds)
  */
-#define DELAY 10000UL
+#define DELAY 20000UL /* 0.020000 sec */
 #define WMMATRIX_VERSION "0.2"
 
 
-
-
-
-
 void 	 ParseCMDLine(int argc, char *argv[]);
 void 	 ButtonPressEvent(XButtonEvent *);
 void 	 print_usage();
@@ -77,147 +69,62 @@ m_state *init_matrix( Display *, Window );
 void 	 draw_matrix( m_state *, int );
 
 
-
-
 int     	 GotFirstClick1, GotDoubleClick1;
 int     	 GotFirstClick2, GotDoubleClick2;
 int     	 GotFirstClick3, GotDoubleClick3;
 int     	 DblClkDelay;
-int		 HasExecute;
-char    	 ExecuteCommand[1024];
+/*int		 HasExecute;*/
+/*char*    	 ExecuteCommand = "xmatrixsmall";*/
 char		*progname  = "wmMatrix";
 char		*progclass = "WMMatrix";
 int		 PixmapSize;
+char *DoubleClickCmd = NULL;
+char *RDoubleClickCmd = NULL;
+char*   TimeColor    	= "#ffff00";
+char*   BackgroundColor	= "#181818";
 
 
-
-
-
-char    TimeColor[30]    	= "#ffff00";
-char    BackgroundColor[30]    	= "#181818";
-
-
-
-
-
-
-/*  
- *   main  
+/*
+ *   main
  */
 int main(int argc, char *argv[]) {
-
-
     XEvent		 event;
-    int			 n, k, m;
-    float		 avg1, user;
-    /*char 		 Command[512];*/
     m_state     	*state;
-    FILE		*fp;
-
 
 
     /*
      *  Parse any command line arguments.
      */
     ParseCMDLine(argc, argv);
-
-
-    strcpy(ExecuteCommand, "xmatrixsmall");
-    HasExecute = 1;
-
-
-
-
-    
+    if(DoubleClickCmd==NULL)
+	DoubleClickCmd=strdup("xscreensaver-demo");
+    if(RDoubleClickCmd==NULL)
+	RDoubleClickCmd=strdup("xscreensaver-command -activate");
     initXwindow(argc, argv);
     openXwindow(argc, argv, wmMatrix_master, wmMatrix_mask_bits, wmMatrix_mask_width, wmMatrix_mask_height);
-
     state = init_matrix( display, iconwin );
 
-
-/*
-    if (HasExecute){
-        sprintf(Command, "%s -window-id 0x%x &", ExecuteCommand, (int)iconwin);
-        system(Command);
-    }
-*/
-
-
-
-
-
-   
     /*
      *  Loop until we die
      */
-    n = k = m = 32000;
     while(1) {
-
-
-#if 0
-	if ( n>10 ){
-
-	    n = 0;
-	    if ( (fp = fopen("/proc/loadavg", "r")) != NULL ){
-
-	        fscanf(fp, "%f", &avg1); avg1 *= 10.0; fclose(fp);
-		m = (int)(40.0 - 1.00*avg1 + 0.5);
-		if (m < 0) m = 0;
-		
-	    } else {
-
-		printf("problem opening /proc/loadavg file for read\n");
-		exit(-1);
-
-	    }
-
-	} else {
-
-	    /*
-	     *  Update the counter. 
-	     */
-	    ++n;
-
-	}
-#endif
-
-m=0;
-
-
-	if (k > m){
-
-	    k = 0;
-	    draw_matrix( state, 40 );
-
-	} else {
-
-	    ++k;
-
-	}
-
-
+	draw_matrix( state, 40 );
 
         /*
          *  Double Click Delays
          *  Keep track of click events. If Delay too long, set GotFirstClick's to False.
          */
-        if (DblClkDelay > 150) {
-
+	/* 25 * 0.02 = .5 sec */
+        if (DblClkDelay > 25) {
             DblClkDelay = 0;
             GotFirstClick1 = 0; GotDoubleClick1 = 0;
             GotFirstClick2 = 0; GotDoubleClick2 = 0;
             GotFirstClick3 = 0; GotDoubleClick3 = 0;
-
         } else {
-
             ++DblClkDelay;
-
         }
 
-
-
-
-	/* 
+	/*
 	 *   Process any pending X events.
 	 */
         while(XPending(display)){
@@ -234,131 +141,81 @@ m=0;
             }
         }
 
-
-
-
-
-	
-	/* 
+	/*
 	 *  sleep till next update. I cant seem to get usleep or select to work properly
 	 *  with args smaller than 10000. A kernel tick problem? If I comment out the next line,
 	 *  the app screams (chews up cpu too). Or if I use DELAY of 0 it also screams.
 	 *  But a delay of 1 or higher is slow.....
-	 *  
+	 *
 	 */
 	short_uusleep(DELAY);
-
-
      }
-
-
-
 }
 
 
-
-
-
-
-
-
-/* 
- *   ParseCMDLine()  
+/*
+ *   ParseCMDLine()
  */
 void ParseCMDLine(int argc, char *argv[]) {
-
-int  i;
-
+    int  i;
     PixmapSize = 2;
-  
     for (i = 1; i < argc; i++) {
-
-        if (!strcmp(argv[i], "-display")){
-
+	if (!strcmp(argv[i], "-display")){
             ++i;
-
-        } else if (!strcmp(argv[i], "-tc")){
-
-            if ((i+1 >= argc)||(argv[i+1][0] == '-')) {
-                fprintf(stderr, "wmMatrix: No color found\n");
-                print_usage();
-                exit(-1);
-            }
-            strcpy(TimeColor, argv[++i]);
-
-        } else if (!strcmp(argv[i], "-bc")){
-
+	} else if (!strcmp(argv[i], "-c")){
             if ((i+1 >= argc)||(argv[i+1][0] == '-')) {
-                fprintf(stderr, "wmMatrix: No color found\n");
+                fprintf(stderr, "wmMatrix: No command given\n");
                 print_usage();
                 exit(-1);
             }
-            strcpy(BackgroundColor, argv[++i]);
-
-        } else if (!strcmp(argv[i], "-e")){
-
+	    if(DoubleClickCmd!=NULL)
+	      free(DoubleClickCmd);
+	    DoubleClickCmd=strdup(argv[++i]);
+	} else if (!strcmp(argv[i], "-cr")){
             if ((i+1 >= argc)||(argv[i+1][0] == '-')) {
                 fprintf(stderr, "wmMatrix: No command given\n");
                 print_usage();
                 exit(-1);
             }
-	    strcpy(ExecuteCommand, argv[++i]);
-	    HasExecute = 1;
-
+	    if(RDoubleClickCmd!=NULL)
+	      free(RDoubleClickCmd);
+	    RDoubleClickCmd=strdup(argv[++i]);
         } else if (!strcmp(argv[i], "-sml")){
-
 	    PixmapSize  = 1;
-
         } else if (!strcmp(argv[i], "-med")){
-
 	    PixmapSize  = 2;
-
         } else if (!strcmp(argv[i], "-lrg")){
-
 	    PixmapSize  = 3;
-
         } else {
-
 	    print_usage();
             exit(1);
 	}
-
     }
-    
-
 }
 
 
-void print_usage(){
-
+void print_usage() {
     printf("\nwmMatrix version: %s\n", WMMATRIX_VERSION);
     printf("\t-h\t\tDisplay help screen.\n");
+    printf("\t-c cmd\t\tCommand executed on doubleclick.\n");
+    printf("\t-cr cmd\t\tCommand executed on right doubleclick\n");
     printf("\t-sml\t\tUse small size pixmap.\n");
     printf("\t-med\t\tUse medium size pixmap.\n");
     printf("\t-lrg\t\tUse large size pixmap.\n");
-
 }
 
 
-
-
-
-
-
 /*
  *  This routine handles button presses.
  *
  *   Double click on
- *              Mouse Button 1: Execute the command defined in the -e command-line option.
+ *              Mouse Button 1: Execute the command defined in the -c command-line option.
  *              Mouse Button 2: No action assigned.
- *              Mouse Button 3: No action assigned.
+ *              Mouse Button 3: Execute the command defined in the -cr command-line option.
  *
  *
  */
 void ButtonPressEvent(XButtonEvent *xev){
-
-
-
     DblClkDelay = 0;
     if ((xev->button == Button1) && (xev->type == ButtonPress)){
         if (GotFirstClick1) GotDoubleClick1 = 1;
@@ -378,12 +235,12 @@ void ButtonPressEvent(XButtonEvent *xev){
     if (GotDoubleClick1) {
         GotFirstClick1 = 0;
         GotDoubleClick1 = 0;
-        system("xscreensaver-demo");
+        system(DoubleClickCmd);
     }
 
 
     /*
-     *  We got a double click on Mouse Button2 (i.e. the left one)
+     *  We got a double click on Mouse Button2 (i.e. the middle one)
      */
     if (GotDoubleClick2) {
         GotFirstClick2 = 0;
@@ -392,16 +249,12 @@ void ButtonPressEvent(XButtonEvent *xev){
 
 
     /*
-     *  We got a double click on Mouse Button3 (i.e. the left one)
+     *  We got a double click on Mouse Button3 (i.e. the right one)
      */
     if (GotDoubleClick3) {
         GotFirstClick3 = 0;
-        GotDoubleClick3 = 0;
+	GotDoubleClick3 = 0;
+        system(RDoubleClickCmd);
     }
-
-
-
    return;
-
 }
-
diff --git a/xutils.c b/xutils.c
index a3da40f..8ac287f 100644
--- a/xutils.c
+++ b/xutils.c
@@ -371,9 +371,12 @@ unsigned long getBlendedColor(char *ColorName, float fac, int red, int grn, int
 void uusleep(unsigned long usecs) {
 
     struct timeval tv;
+    fd_set fds;
     tv.tv_sec  = usecs / 1000000UL;
     tv.tv_usec = usecs % 1000000UL;
-    select(1, NULL, NULL, NULL, &tv);
+    FD_ZERO(&fds);
+    FD_SET(x_fd,  &fds);
+    select(x_fd + 1, &fds, NULL, NULL, &tv);
 
 }
 
@@ -385,9 +388,12 @@ void uusleep(unsigned long usecs) {
 void short_uusleep(unsigned long usecs) {
 
     struct timeval tv;
+    fd_set fds;
     tv.tv_sec  = 0;
     tv.tv_usec = usecs;
-    select(1, NULL, NULL, NULL, &tv);
+    FD_ZERO(&fds);
+    FD_SET(x_fd,  &fds);
+    select(x_fd + 1, &fds, NULL, NULL, &tv);
 
 }
 
diff --git a/xutils.h b/xutils.h
index 1e03a08..9c062b9 100644
--- a/xutils.h
+++ b/xutils.h
@@ -43,7 +43,8 @@ void  		setMaskXY(int, int);
 unsigned long 	getColor(char *, float, int *, int *, int *);
 unsigned long 	getBlendedColor(char *, float, int, int, int);
 void 		RedrawWindow(void);
-void 		wusleep( unsigned int );
+void 		uusleep( unsigned long );
+void 		short_uusleep( unsigned long );
 
 
 
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin