Репозитории ALT

Группа :: Графические оболочки/Window Maker
Пакет: wmMatrix
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: wmMatrix-0.2-alt3.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 );