wmmisc: Use wmgeneral from libdockapp.
This commit is contained in:
parent
4db8f00e97
commit
6582a4e21d
6 changed files with 19 additions and 606 deletions
|
@ -2,8 +2,7 @@ bin_PROGRAMS = wmmisc
|
||||||
wmmisc_SOURCES = src/dockapp_draw.c src/dockapp_draw.h \
|
wmmisc_SOURCES = src/dockapp_draw.c src/dockapp_draw.h \
|
||||||
src/dockapp_main.c src/dockapp_main.h \
|
src/dockapp_main.c src/dockapp_main.h \
|
||||||
src/dockapp_utils.c src/dockapp_utils.h \
|
src/dockapp_utils.c src/dockapp_utils.h \
|
||||||
src/wmgeneral.c src/wmgeneral.h \
|
|
||||||
src/wmmisc-master.xpm
|
src/wmmisc-master.xpm
|
||||||
|
|
||||||
AM_CFLAGS = $(X11_CFLAGS) $(XEXT_CFLAGS) $(XPM_CFLAGS)
|
AM_CFLAGS = $(X11_CFLAGS) $(XEXT_CFLAGS) $(XPM_CFLAGS) $(DOCKAPP_CFLAGS)
|
||||||
LIBS += $(X11_LIBS) $(XEXT_LIBS) $(XPM_LIBS)
|
LIBS += $(X11_LIBS) $(XEXT_LIBS) $(XPM_LIBS) $(DOCKAPP_LIBS)
|
||||||
|
|
|
@ -8,5 +8,6 @@ AC_SEARCH_LIBS([nearbyintf], [m], [], [
|
||||||
PKG_CHECK_MODULES([X11], [x11])
|
PKG_CHECK_MODULES([X11], [x11])
|
||||||
PKG_CHECK_MODULES([XEXT], [xext])
|
PKG_CHECK_MODULES([XEXT], [xext])
|
||||||
PKG_CHECK_MODULES([XPM], [xpm])
|
PKG_CHECK_MODULES([XPM], [xpm])
|
||||||
|
PKG_CHECK_MODULES([DOCKAPP], [dockapp])
|
||||||
AC_CONFIG_FILES([Makefile])
|
AC_CONFIG_FILES([Makefile])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <X11/xpm.h>
|
#include <X11/xpm.h>
|
||||||
#include <X11/extensions/shape.h>
|
#include <X11/extensions/shape.h>
|
||||||
|
|
||||||
#include "wmgeneral.h"
|
#include <libdockapp/wmgeneral.h>
|
||||||
#include "dockapp_draw.h"
|
#include "dockapp_draw.h"
|
||||||
#include "dockapp_utils.h"
|
#include "dockapp_utils.h"
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ dockapp_draw_big_digit( unsigned int digit_value,
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
copy_xpm_area( ( ( ( digit_value / digit_value_of_ten ) % 10 ) *
|
copyXPMArea( ( ( ( digit_value / digit_value_of_ten ) % 10 ) *
|
||||||
DOCKAPP_BIG_CHAR_WIDTH + DOCKAPP_BIG_DIGIT_X ),
|
DOCKAPP_BIG_CHAR_WIDTH + DOCKAPP_BIG_DIGIT_X ),
|
||||||
DOCKAPP_BIG_DIGIT_Y,
|
DOCKAPP_BIG_DIGIT_Y,
|
||||||
DOCKAPP_BIG_CHAR_WIDTH,
|
DOCKAPP_BIG_CHAR_WIDTH,
|
||||||
|
@ -77,7 +77,7 @@ dockapp_draw_big_digit( unsigned int digit_value,
|
||||||
digit_new_draw_location_x += DOCKAPP_BIG_CHAR_WIDTH;
|
digit_new_draw_location_x += DOCKAPP_BIG_CHAR_WIDTH;
|
||||||
} while ( 0 < digit_value_of_ten );
|
} while ( 0 < digit_value_of_ten );
|
||||||
|
|
||||||
redraw_window();
|
RedrawWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -113,7 +113,7 @@ dockapp_draw_small_digit( unsigned int d_value,
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
copy_xpm_area( ( ( ( d_value / digit_value_of_ten) % 10) *
|
copyXPMArea( ( ( ( d_value / digit_value_of_ten) % 10) *
|
||||||
DOCKAPP_SMALL_CHAR_WIDTH + DOCKAPP_SMALL_DIGIT_X ),
|
DOCKAPP_SMALL_CHAR_WIDTH + DOCKAPP_SMALL_DIGIT_X ),
|
||||||
DOCKAPP_SMALL_DIGIT_Y,
|
DOCKAPP_SMALL_DIGIT_Y,
|
||||||
DOCKAPP_SMALL_CHAR_WIDTH,
|
DOCKAPP_SMALL_CHAR_WIDTH,
|
||||||
|
@ -125,7 +125,7 @@ dockapp_draw_small_digit( unsigned int d_value,
|
||||||
digit_new_draw_location_x += DOCKAPP_SMALL_CHAR_WIDTH;
|
digit_new_draw_location_x += DOCKAPP_SMALL_CHAR_WIDTH;
|
||||||
} while ( 0 < digit_value_of_ten );
|
} while ( 0 < digit_value_of_ten );
|
||||||
|
|
||||||
redraw_window();
|
RedrawWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -171,7 +171,7 @@ dockapp_draw_big_str( const char* string_to_draw,
|
||||||
{
|
{
|
||||||
string_character = dockapp_utils_get_char( string_to_draw[string_character_position] );
|
string_character = dockapp_utils_get_char( string_to_draw[string_character_position] );
|
||||||
|
|
||||||
copy_xpm_area( string_character * DOCKAPP_BIG_CHAR_WIDTH + DOCKAPP_BIG_LETTER_X,
|
copyXPMArea( string_character * DOCKAPP_BIG_CHAR_WIDTH + DOCKAPP_BIG_LETTER_X,
|
||||||
DOCKAPP_BIG_LETTER_Y,
|
DOCKAPP_BIG_LETTER_Y,
|
||||||
DOCKAPP_BIG_CHAR_WIDTH,
|
DOCKAPP_BIG_CHAR_WIDTH,
|
||||||
DOCKAPP_BIG_CHAR_HEIGHT,
|
DOCKAPP_BIG_CHAR_HEIGHT,
|
||||||
|
@ -181,7 +181,7 @@ dockapp_draw_big_str( const char* string_to_draw,
|
||||||
digit_new_draw_location_x += DOCKAPP_BIG_CHAR_WIDTH;
|
digit_new_draw_location_x += DOCKAPP_BIG_CHAR_WIDTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
redraw_window();
|
RedrawWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -226,7 +226,7 @@ dockapp_draw_small_str( const char* string_to_draw,
|
||||||
{
|
{
|
||||||
string_character = dockapp_utils_get_char( string_to_draw[string_character_position] );
|
string_character = dockapp_utils_get_char( string_to_draw[string_character_position] );
|
||||||
|
|
||||||
copy_xpm_area( string_character * DOCKAPP_SMALL_CHAR_WIDTH + DOCKAPP_SMALL_LETTER_X,
|
copyXPMArea( string_character * DOCKAPP_SMALL_CHAR_WIDTH + DOCKAPP_SMALL_LETTER_X,
|
||||||
DOCKAPP_SMALL_LETTER_Y,
|
DOCKAPP_SMALL_LETTER_Y,
|
||||||
DOCKAPP_SMALL_CHAR_WIDTH,
|
DOCKAPP_SMALL_CHAR_WIDTH,
|
||||||
DOCKAPP_SMALL_CHAR_HEIGHT,
|
DOCKAPP_SMALL_CHAR_HEIGHT,
|
||||||
|
@ -236,7 +236,7 @@ dockapp_draw_small_str( const char* string_to_draw,
|
||||||
digit_new_draw_location_x += DOCKAPP_SMALL_CHAR_WIDTH;
|
digit_new_draw_location_x += DOCKAPP_SMALL_CHAR_WIDTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
redraw_window();
|
RedrawWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -272,14 +272,14 @@ dockapp_draw_bar( int bar_draw_width,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
copy_xpm_area( bar_x,
|
copyXPMArea( bar_x,
|
||||||
bar_y,
|
bar_y,
|
||||||
bar_draw_width,
|
bar_draw_width,
|
||||||
DOCKAPP_BAR_HEIGHT,
|
DOCKAPP_BAR_HEIGHT,
|
||||||
bar_draw_x,
|
bar_draw_x,
|
||||||
bar_draw_y );
|
bar_draw_y );
|
||||||
|
|
||||||
redraw_window();
|
RedrawWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -328,5 +328,5 @@ dockapp_draw_data( void )
|
||||||
dockapp_draw_small_digit( dockapp_proc.load[0], 1, 36, 53 );
|
dockapp_draw_small_digit( dockapp_proc.load[0], 1, 36, 53 );
|
||||||
dockapp_draw_small_digit( dockapp_proc.load[1], 1, 50, 53 );
|
dockapp_draw_small_digit( dockapp_proc.load[1], 1, 50, 53 );
|
||||||
|
|
||||||
redraw_window();
|
RedrawWindow();
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#include <X11/xpm.h>
|
#include <X11/xpm.h>
|
||||||
#include <X11/extensions/shape.h>
|
#include <X11/extensions/shape.h>
|
||||||
|
|
||||||
#include "wmgeneral.h"
|
#include <libdockapp/wmgeneral.h>
|
||||||
|
|
||||||
#include "wmmisc-master.xpm"
|
#include "wmmisc-master.xpm"
|
||||||
#include "dockapp_main.h"
|
#include "dockapp_main.h"
|
||||||
|
@ -137,19 +137,19 @@ main( int argc, char** argv )
|
||||||
opt = getopt( argc, argv, "hv" );
|
opt = getopt( argc, argv, "hv" );
|
||||||
}
|
}
|
||||||
|
|
||||||
create_xbm_from_xpm( wmmisc_mask_bits,
|
createXBMfromXPM( wmmisc_mask_bits,
|
||||||
wmmisc_master_xpm,
|
wmmisc_master_xpm,
|
||||||
wmmisc_mask_width,
|
wmmisc_mask_width,
|
||||||
wmmisc_mask_height );
|
wmmisc_mask_height );
|
||||||
|
|
||||||
open_window( argc,
|
openXwindow( argc,
|
||||||
argv,
|
argv,
|
||||||
wmmisc_master_xpm,
|
wmmisc_master_xpm,
|
||||||
wmmisc_mask_bits,
|
wmmisc_mask_bits,
|
||||||
wmmisc_mask_width,
|
wmmisc_mask_width,
|
||||||
wmmisc_mask_height );
|
wmmisc_mask_height );
|
||||||
|
|
||||||
redraw_window();
|
RedrawWindow();
|
||||||
|
|
||||||
dockapp_draw_small_str( "USERS", 4, 4 );
|
dockapp_draw_small_str( "USERS", 4, 4 );
|
||||||
dockapp_draw_small_str( "PROCS", 4, 11 );
|
dockapp_draw_small_str( "PROCS", 4, 11 );
|
||||||
|
|
|
@ -1,530 +0,0 @@
|
||||||
/*
|
|
||||||
* wmmisc - WindowMaker Dockapp for monitoring misc. information.
|
|
||||||
* Copyright (C) 2003-2006 Jesse S. (luxorfalls@sbcglobal.net)
|
|
||||||
*
|
|
||||||
* wmmisc is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* wmmisc is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with wmmisc; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
|
||||||
#include <X11/xpm.h>
|
|
||||||
#include <X11/extensions/shape.h>
|
|
||||||
|
|
||||||
#include "wmgeneral.h"
|
|
||||||
|
|
||||||
static Display *da_display;
|
|
||||||
static Window da_root_window;
|
|
||||||
static int da_screen;
|
|
||||||
static int da_x_fd;
|
|
||||||
static int da_display_depth;
|
|
||||||
static XSizeHints da_size_hints;
|
|
||||||
static XWMHints da_wm_hints;
|
|
||||||
static Pixel da_bg_pixel;
|
|
||||||
static Pixel da_fg_pixel;
|
|
||||||
static char* da_geometry = NULL;
|
|
||||||
static Window da_icon_window;
|
|
||||||
static Window da_window;
|
|
||||||
static GC da_normal_gc;
|
|
||||||
static xpm_icon da_window_icon;
|
|
||||||
static Pixmap da_pixmask;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
int enable;
|
|
||||||
int top;
|
|
||||||
int bottom;
|
|
||||||
int left;
|
|
||||||
int right;
|
|
||||||
} mouse_region_t;
|
|
||||||
|
|
||||||
mouse_region_t mouse_region[MAX_MOUSE_REGION];
|
|
||||||
|
|
||||||
void
|
|
||||||
get_xpm( xpm_icon* window_icon, char** pixmap_bytes )
|
|
||||||
{
|
|
||||||
XWindowAttributes attributes;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
XGetWindowAttributes( da_display, da_root_window, &attributes );
|
|
||||||
|
|
||||||
window_icon->attributes.valuemask |= ( XpmReturnPixels | XpmReturnExtensions );
|
|
||||||
|
|
||||||
err = XpmCreatePixmapFromData( da_display,
|
|
||||||
da_root_window,
|
|
||||||
pixmap_bytes,
|
|
||||||
&window_icon->pixmap,
|
|
||||||
&window_icon->mask,
|
|
||||||
&window_icon->attributes );
|
|
||||||
|
|
||||||
if ( XpmSuccess != err )
|
|
||||||
{
|
|
||||||
fprintf( stderr, "Not enough free color cells.\n" );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Pixel
|
|
||||||
get_color_by_name( const char* color_name )
|
|
||||||
{
|
|
||||||
XColor color;
|
|
||||||
XWindowAttributes attributes;
|
|
||||||
|
|
||||||
XGetWindowAttributes( da_display, da_root_window, &attributes );
|
|
||||||
|
|
||||||
color.pixel = 0;
|
|
||||||
|
|
||||||
if ( 0 == XParseColor( da_display, attributes.colormap, color_name, &color ) )
|
|
||||||
{
|
|
||||||
fprintf( stderr, "wmmisc: Can't parse color name: '%s'\n", color_name );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( 0 == XAllocColor( da_display, attributes.colormap, &color ))
|
|
||||||
{
|
|
||||||
fprintf( stderr, "wmmisc: Can't allocate memory for color: '%s'\n", color_name );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return color.pixel;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
flush_expose( Window window )
|
|
||||||
{
|
|
||||||
XEvent dummy;
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
while ( 0 != XCheckTypedWindowEvent( da_display, window, Expose, &dummy ) )
|
|
||||||
{
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
redraw_window( void )
|
|
||||||
{
|
|
||||||
flush_expose( da_icon_window );
|
|
||||||
|
|
||||||
XCopyArea( da_display,
|
|
||||||
da_window_icon.pixmap,
|
|
||||||
da_icon_window,
|
|
||||||
da_normal_gc,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
da_window_icon.attributes.width,
|
|
||||||
da_window_icon.attributes.height,
|
|
||||||
0,
|
|
||||||
0 );
|
|
||||||
|
|
||||||
flush_expose( da_window );
|
|
||||||
|
|
||||||
XCopyArea( da_display,
|
|
||||||
da_window_icon.pixmap,
|
|
||||||
da_window,
|
|
||||||
da_normal_gc,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
da_window_icon.attributes.width,
|
|
||||||
da_window_icon.attributes.height,
|
|
||||||
0,
|
|
||||||
0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
redraw_window_coords( int x, int y )
|
|
||||||
{
|
|
||||||
flush_expose( da_icon_window );
|
|
||||||
|
|
||||||
XCopyArea( da_display,
|
|
||||||
da_window_icon.pixmap,
|
|
||||||
da_icon_window,
|
|
||||||
da_normal_gc,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
da_window_icon.attributes.width,
|
|
||||||
da_window_icon.attributes.height,
|
|
||||||
0,
|
|
||||||
0 );
|
|
||||||
|
|
||||||
flush_expose( da_window );
|
|
||||||
|
|
||||||
XCopyArea( da_display,
|
|
||||||
da_window_icon.pixmap,
|
|
||||||
da_window,
|
|
||||||
da_normal_gc,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
da_window_icon.attributes.width,
|
|
||||||
da_window_icon.attributes.height,
|
|
||||||
0,
|
|
||||||
0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
add_mouse_region( int m_index,
|
|
||||||
int m_left,
|
|
||||||
int m_top,
|
|
||||||
int m_right,
|
|
||||||
int m_bottom )
|
|
||||||
{
|
|
||||||
if ( MAX_MOUSE_REGION > m_index )
|
|
||||||
{
|
|
||||||
mouse_region[m_index].enable = 1;
|
|
||||||
mouse_region[m_index].top = m_top;
|
|
||||||
mouse_region[m_index].left = m_left;
|
|
||||||
mouse_region[m_index].bottom = m_bottom;
|
|
||||||
mouse_region[m_index].right = m_right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
check_mouse_region( int x, int y )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int found;
|
|
||||||
|
|
||||||
found = 0;
|
|
||||||
|
|
||||||
for ( i = 0; MAX_MOUSE_REGION > i && 0 == found; ++i )
|
|
||||||
{
|
|
||||||
if ( 0 != mouse_region[i].enable &&
|
|
||||||
x <= mouse_region[i].right &&
|
|
||||||
x >= mouse_region[i].left &&
|
|
||||||
y <= mouse_region[i].bottom &&
|
|
||||||
y >= mouse_region[i].top )
|
|
||||||
{
|
|
||||||
found = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( 0 == found )
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return --i;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
create_xbm_from_xpm( char* xbm, char** xpm, int sx, int sy )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
int k;
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
int numcol;
|
|
||||||
int depth;
|
|
||||||
int zero = 0;
|
|
||||||
unsigned char bwrite;
|
|
||||||
int bcount;
|
|
||||||
int curpixel;
|
|
||||||
|
|
||||||
sscanf( *xpm, "%d %d %d %d", &width, &height, &numcol, &depth );
|
|
||||||
|
|
||||||
for ( k = 0; k != depth; ++k )
|
|
||||||
{
|
|
||||||
zero <<= 8;
|
|
||||||
zero |= xpm[2][k];
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( i = numcol + 1; i < ( numcol + sy + 1 ); ++i )
|
|
||||||
{
|
|
||||||
bcount = 0;
|
|
||||||
bwrite = 0;
|
|
||||||
|
|
||||||
for ( j = 0; j < sx * depth; j += depth )
|
|
||||||
{
|
|
||||||
bwrite >>= 1;
|
|
||||||
|
|
||||||
curpixel = 0;
|
|
||||||
|
|
||||||
for ( k = 0; k != depth; ++k )
|
|
||||||
{
|
|
||||||
curpixel <<= 8;
|
|
||||||
curpixel |= xpm[i][j + k];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( curpixel != zero )
|
|
||||||
{
|
|
||||||
bwrite += 128;
|
|
||||||
}
|
|
||||||
|
|
||||||
bcount++;
|
|
||||||
|
|
||||||
if ( bcount == 8 )
|
|
||||||
{
|
|
||||||
*xbm = bwrite;
|
|
||||||
++xbm;
|
|
||||||
bcount = 0;
|
|
||||||
bwrite = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
copy_xpm_area( int x,
|
|
||||||
int y,
|
|
||||||
unsigned int sx,
|
|
||||||
unsigned int sy,
|
|
||||||
int dx,
|
|
||||||
int dy )
|
|
||||||
{
|
|
||||||
XCopyArea( da_display,
|
|
||||||
da_window_icon.pixmap,
|
|
||||||
da_window_icon.pixmap,
|
|
||||||
da_normal_gc,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
sx,
|
|
||||||
sy,
|
|
||||||
dx,
|
|
||||||
dy );
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
copy_xbm_area( int x,
|
|
||||||
int y,
|
|
||||||
unsigned int sx,
|
|
||||||
unsigned int sy,
|
|
||||||
int dx,
|
|
||||||
int dy )
|
|
||||||
{
|
|
||||||
XCopyArea( da_display,
|
|
||||||
da_window_icon.mask,
|
|
||||||
da_window_icon.pixmap,
|
|
||||||
da_normal_gc,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
sx,
|
|
||||||
sy,
|
|
||||||
dx,
|
|
||||||
dy );
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
set_mask_coords( int x, int y )
|
|
||||||
{
|
|
||||||
XShapeCombineMask( da_display,
|
|
||||||
da_window,
|
|
||||||
ShapeBounding,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
da_pixmask,
|
|
||||||
ShapeSet );
|
|
||||||
XShapeCombineMask( da_display,
|
|
||||||
da_icon_window,
|
|
||||||
ShapeBounding,
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
da_pixmask,
|
|
||||||
ShapeSet );
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
open_window( int argc,
|
|
||||||
char** argv,
|
|
||||||
char** pixmap_bytes,
|
|
||||||
char* pixmask_bits,
|
|
||||||
int pixmask_width,
|
|
||||||
int pixmask_height )
|
|
||||||
{
|
|
||||||
unsigned int borderwidth = 1;
|
|
||||||
XClassHint classHint;
|
|
||||||
char* display_name = NULL;
|
|
||||||
char* wname = NULL;
|
|
||||||
XTextProperty name;
|
|
||||||
XGCValues gcv;
|
|
||||||
unsigned long gcm;
|
|
||||||
char* geometry = NULL;
|
|
||||||
int dummy = 0;
|
|
||||||
int i;
|
|
||||||
int wx;
|
|
||||||
int wy;
|
|
||||||
|
|
||||||
wname = argv[0];
|
|
||||||
|
|
||||||
for ( i = 1; i < argc; ++i )
|
|
||||||
{
|
|
||||||
if ( 0 == strcmp( argv[i], "-display" ) )
|
|
||||||
{
|
|
||||||
display_name = argv[++i];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( 0 == strcmp( argv[i], "-geometry" ) )
|
|
||||||
{
|
|
||||||
geometry = argv[++i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
da_display = XOpenDisplay( display_name );
|
|
||||||
|
|
||||||
if ( NULL == da_display )
|
|
||||||
{
|
|
||||||
fprintf( stderr,
|
|
||||||
"%s: Can't open display: '%s'\n",
|
|
||||||
wname,
|
|
||||||
XDisplayName( display_name ) );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
da_screen = DefaultScreen( da_display );
|
|
||||||
da_root_window = RootWindow( da_display, da_screen );
|
|
||||||
da_display_depth = DefaultDepth( da_display, da_screen );
|
|
||||||
da_x_fd = XConnectionNumber( da_display );
|
|
||||||
|
|
||||||
/* Convert XPM to XImage */
|
|
||||||
get_xpm( &da_window_icon, pixmap_bytes );
|
|
||||||
|
|
||||||
/* Create a window to hold the stuff */
|
|
||||||
da_size_hints.flags = USSize | USPosition;
|
|
||||||
da_size_hints.x = 0;
|
|
||||||
da_size_hints.y = 0;
|
|
||||||
|
|
||||||
da_bg_pixel = get_color_by_name( "white" );
|
|
||||||
da_fg_pixel = get_color_by_name( "black" );
|
|
||||||
|
|
||||||
XWMGeometry( da_display,
|
|
||||||
da_screen,
|
|
||||||
da_geometry,
|
|
||||||
NULL,
|
|
||||||
borderwidth,
|
|
||||||
&da_size_hints,
|
|
||||||
&da_size_hints.x,
|
|
||||||
&da_size_hints.y,
|
|
||||||
&da_size_hints.width,
|
|
||||||
&da_size_hints.height,
|
|
||||||
&dummy );
|
|
||||||
|
|
||||||
da_size_hints.width = 64;
|
|
||||||
da_size_hints.height = 64;
|
|
||||||
|
|
||||||
da_window = XCreateSimpleWindow( da_display,
|
|
||||||
da_root_window,
|
|
||||||
da_size_hints.x,
|
|
||||||
da_size_hints.y,
|
|
||||||
da_size_hints.width,
|
|
||||||
da_size_hints.height,
|
|
||||||
borderwidth,
|
|
||||||
da_fg_pixel,
|
|
||||||
da_bg_pixel );
|
|
||||||
|
|
||||||
da_icon_window = XCreateSimpleWindow( da_display,
|
|
||||||
da_window,
|
|
||||||
da_size_hints.x,
|
|
||||||
da_size_hints.y,
|
|
||||||
da_size_hints.width,
|
|
||||||
da_size_hints.height,
|
|
||||||
borderwidth,
|
|
||||||
da_fg_pixel,
|
|
||||||
da_bg_pixel );
|
|
||||||
|
|
||||||
/* Activate hints */
|
|
||||||
XSetWMNormalHints( da_display, da_window, &da_size_hints );
|
|
||||||
classHint.res_name = wname;
|
|
||||||
classHint.res_class = wname;
|
|
||||||
XSetClassHint( da_display, da_window, &classHint );
|
|
||||||
XSelectInput( da_display,
|
|
||||||
da_window,
|
|
||||||
( ButtonPressMask |
|
|
||||||
ExposureMask |
|
|
||||||
ButtonReleaseMask |
|
|
||||||
PointerMotionMask |
|
|
||||||
StructureNotifyMask ) );
|
|
||||||
XSelectInput( da_display,
|
|
||||||
da_icon_window,
|
|
||||||
( ButtonPressMask |
|
|
||||||
ExposureMask |
|
|
||||||
ButtonReleaseMask |
|
|
||||||
PointerMotionMask |
|
|
||||||
StructureNotifyMask ) );
|
|
||||||
|
|
||||||
if ( 0 == XStringListToTextProperty( &wname, 1, &name ) )
|
|
||||||
{
|
|
||||||
fprintf( stderr, "%s: can't allocate window name\n", wname );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
XSetWMName( da_display, da_window, &name );
|
|
||||||
|
|
||||||
/* Create GC for drawing */
|
|
||||||
gcm = GCForeground | GCBackground | GCGraphicsExposures;
|
|
||||||
gcv.foreground = da_fg_pixel;
|
|
||||||
gcv.background = da_bg_pixel;
|
|
||||||
gcv.graphics_exposures = 0;
|
|
||||||
da_normal_gc = XCreateGC( da_display, da_root_window, gcm, &gcv );
|
|
||||||
|
|
||||||
/* ONLYSHAPE ON */
|
|
||||||
da_pixmask = XCreateBitmapFromData( da_display,
|
|
||||||
da_window,
|
|
||||||
pixmask_bits,
|
|
||||||
pixmask_width,
|
|
||||||
pixmask_height );
|
|
||||||
|
|
||||||
XShapeCombineMask( da_display,
|
|
||||||
da_window,
|
|
||||||
ShapeBounding,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
da_pixmask,
|
|
||||||
ShapeSet );
|
|
||||||
XShapeCombineMask( da_display,
|
|
||||||
da_icon_window,
|
|
||||||
ShapeBounding,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
da_pixmask,
|
|
||||||
ShapeSet );
|
|
||||||
|
|
||||||
/* ONLYSHAPE OFF */
|
|
||||||
da_wm_hints.initial_state = WithdrawnState;
|
|
||||||
da_wm_hints.icon_window = da_icon_window;
|
|
||||||
da_wm_hints.icon_x = da_size_hints.x;
|
|
||||||
da_wm_hints.icon_y = da_size_hints.y;
|
|
||||||
da_wm_hints.window_group = da_window;
|
|
||||||
da_wm_hints.flags = ( StateHint |
|
|
||||||
IconWindowHint |
|
|
||||||
IconPositionHint |
|
|
||||||
WindowGroupHint );
|
|
||||||
|
|
||||||
XSetWMHints( da_display, da_window, &da_wm_hints );
|
|
||||||
XSetCommand( da_display, da_window, argv, argc );
|
|
||||||
XMapWindow( da_display, da_window );
|
|
||||||
|
|
||||||
if ( NULL != geometry )
|
|
||||||
{
|
|
||||||
if ( 2 != sscanf( geometry, "+%d+%d", &wx, &wy ) )
|
|
||||||
{
|
|
||||||
fprintf( stderr, "Bad geometry string.\n" );
|
|
||||||
exit( 1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
XMoveWindow( da_display, da_window, wx, wy );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( NULL != display_name )
|
|
||||||
{
|
|
||||||
free( display_name );
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
/*
|
|
||||||
* wmmisc - WindowMaker Dockapp for monitoring misc. information.
|
|
||||||
* Copyright (C) 2003-2006 Jesse S. (luxorfalls@sbcglobal.net)
|
|
||||||
*
|
|
||||||
* wmmisc is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* wmmisc is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with wmmisc; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __dockapp_wmgeneral_h
|
|
||||||
#define __dockapp_wmgeneral_h
|
|
||||||
|
|
||||||
#define MAX_MOUSE_REGION ( 16 )
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
Pixmap pixmap;
|
|
||||||
Pixmap mask;
|
|
||||||
XpmAttributes attributes;
|
|
||||||
} xpm_icon;
|
|
||||||
|
|
||||||
void get_xpm( xpm_icon*, char** );
|
|
||||||
|
|
||||||
Pixel get_color_by_name( const char* );
|
|
||||||
|
|
||||||
int flush_expose( Window );
|
|
||||||
|
|
||||||
void redraw_window( void );
|
|
||||||
|
|
||||||
void redraw_window_coords( int, int );
|
|
||||||
|
|
||||||
void add_mouse_region( int, int, int, int, int );
|
|
||||||
|
|
||||||
int check_mouse_region( int, int );
|
|
||||||
|
|
||||||
void create_xbm_from_xpm( char*, char**, int, int );
|
|
||||||
|
|
||||||
void copy_xpm_area( int, int, unsigned int, unsigned int, int, int );
|
|
||||||
|
|
||||||
void copy_xbm_area( int, int, unsigned int, unsigned int, int, int );
|
|
||||||
|
|
||||||
void set_mask_coords( int, int );
|
|
||||||
|
|
||||||
void open_window( int, char**, char**, char*, int, int );
|
|
||||||
|
|
||||||
#endif /* !__dockapp_wmgeneral_h */
|
|
Loading…
Reference in a new issue