fixed issue and test svn

git-svn-id: http://tint2.googlecode.com/svn/trunk@14 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
lorthiois@bbsoft.fr
2008-10-30 15:39:24 +00:00
parent 420dd5d1e2
commit c9dc168587
13 changed files with 130 additions and 136 deletions

View File

@@ -7,13 +7,16 @@ ifndef DESTDIR
ifndef PREFIX
BINDIR=/usr/bin
XDG_CONFIG_DIR=/etc/xdg
MAN_DIR=/usr/share/man
else
BINDIR=$(PREFIX)/bin
XDG_CONFIG_DIR=/etc/xdg
MAN_DIR=/usr/share/man
endif
else
BINDIR=$(DESTDIR)/usr/bin
XDG_CONFIG_DIR=$(DESTDIR)/etc/xdg
MAN_DIR=$(DESTDIR)/usr/share/man
endif
@@ -24,13 +27,17 @@ $(PROGNAME): $(FILES) $(SYSTRAYOBJ)
install:
mkdir -p $(BINDIR)
mkdir -p $(XDG_CONFIG_DIR)/tint2
mkdir -p $(MANDIR)
mkdir -p $(MANDIR)/man1
install $(PROGNAME) $(BINDIR)
cp -f ../tintrc06 $(XDG_CONFIG_DIR)/tint2/tint2rc
cp -f ../doc/man/tint2.1 /usr/man/man1
cp -f ../doc/man/tint2.1 $(MAN_DIR)/man1
uninstall:
rm -f $(BINDIR)/$(PROGNAME)
rm -f $(MAN_DIR)/man1/tint2.1
clean:
rm -f $(PROGNAME)
.PHONY: clean uninstall install

View File

@@ -36,43 +36,6 @@ void visual_refresh ()
draw (&panel.area);
refresh (&panel.area);
/*
pour version 0.7
gestion du systray
positionnement et taille fixe du systray (objet systray)
détection des notifications (détection des icones, ajout a la liste)
ajouter la transparence des icones
gérer le redimentionnement des éléments
=> voir si lon peut faire abstraction sur le positionnement des objets ?
sachant que certains objets (task, taskbar) on une taille définit par l'extérieur
et d'autres objets (clock, systray) on une taille définit par l'intérieur
gestion du layout
voir le positionnement des taskbar, task et systray
définir panel_layout dans la configuration
comment gérer le multi panel avec des layouts différents
vérifier le niveau d'abstraction du code
utiliser la fonction draw(obj) récurrente sur Taskbar, Task, Systray, Clock
est ce compatible avec l'affichage de la tache active et les changement de taille -> redessine le panel
correction de bugs :
memory, segfault
background
remettre en place single_desktop avec nouveau layout
remettre en place multi_monitor avec nouveau layout
vérifier le changement de configuration
pour version 0.8
gestion du thème
voir la gestion du dégradé sur le bord et le fond (inkscape)
faut-il trois coordonnées de padding x, y, x inter-objects
gestion du zoom
définir le zoom du panel
*/
if (panel.clock.time1_format) {
if (panel.clock.area.redraw)
panel.refresh = 1;

View File

@@ -66,6 +66,7 @@ void server_init_atoms ()
server.atom._WIN_LAYER = XInternAtom (server.dsp, "_WIN_LAYER", False);
server.atom._NET_WM_STRUT_PARTIAL = XInternAtom (server.dsp, "_NET_WM_STRUT_PARTIAL", False);
server.atom.WM_NAME = XInternAtom(server.dsp, "WM_NAME", False);
server.atom.__SWM_VROOT = XInternAtom(server.dsp, "__SWM_VROOT", False);
}
@@ -133,12 +134,49 @@ void *server_get_property (Window win, Atom at, Atom type, int *num_results)
}
Pixmap server_create_pixmap (int width, int height)
{
return XCreatePixmap (server.dsp, server.root_win, width, height, server.depth);
}
Pixmap get_root_pixmap ()
{
Pixmap ret;
Window root = RootWindow(server.dsp, server.screen);
ret = None;
int act_format, c = 2 ;
u_long nitems ;
u_long bytes_after ;
u_char *prop ;
Atom dummy_id;
do {
if (XGetWindowProperty(server.dsp, root, server.atom._XROOTPMAP_ID, 0, 1,
False, XA_PIXMAP, &dummy_id, &act_format,
&nitems, &bytes_after, &prop) == Success) {
if (prop) {
ret = *((Pixmap *)prop);
XFree(prop);
break;
}
}
} while (--c > 0);
return ret;
}
/*
Pixmap get_root_pixmap ()
{
// conky capture correctement le fond d'écran en xlib !!
Pixmap root_pixmap;
unsigned long *res;
server.root_win = window_get_root();
res = server_get_property (server.root_win, server.atom._XROOTPMAP_ID, XA_PIXMAP, 0);
if (res) {
root_pixmap = *((Drawable*) res);
@@ -149,18 +187,9 @@ Pixmap get_root_pixmap ()
printf("get_root_pixmap incorrect\n");
// try _XSETROOT_ID
}
return 0;
}
Pixmap server_create_pixmap (int width, int height)
{
return XCreatePixmap (server.dsp, server.root_win, width, height, server.depth);
}
}
*/
void server_refresh_root_pixmap ()
{

View File

@@ -51,6 +51,7 @@ typedef struct Global_atom
Atom _WIN_LAYER;
Atom _NET_WM_STRUT_PARTIAL;
Atom WM_NAME;
Atom __SWM_VROOT;
} Global_atom;
@@ -97,6 +98,7 @@ void server_catch_error (Display *d, XErrorEvent *ev);
void server_init_atoms ();
Pixmap server_create_pixmap (int width, int height);
void get_monitors();
Pixmap get_root_pixmap();
#endif

View File

@@ -75,7 +75,7 @@ void init ()
}
server_init_atoms ();
server.screen = DefaultScreen (server.dsp);
server.root_win = RootWindow (server.dsp, server.screen);
server.root_win = RootWindow(server.dsp, server.screen);
server.depth = DefaultDepth (server.dsp, server.screen);
server.visual = DefaultVisual (server.dsp, server.screen);
server.desktop = server_get_current_desktop ();
@@ -407,6 +407,7 @@ load_config:
break;
case PropertyNotify:
//printf("PropertyNotify\n");
event_property_notify (e.xproperty.window, e.xproperty.atom);
break;

BIN
src/tint2

Binary file not shown.

View File

@@ -1,17 +1,15 @@
/**************************************************************************
* base class for all objects (panel, taskbar, task, systray, clock, ...).
* each object 'inherit' Area and implement draw_foreground if needed.
* Copyright (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr)
*
* Area is at the begining of each object so &object == &area.
* base class for all graphical objects (panel, taskbar, task, systray, clock, ...).
* Area is at the begining of each graphical object so &object == &area.
*
* Area manage the background and border drawing, size and padding.
* Area manage also the tree of visible objects
* panel -> taskbars -> tasks
* -> clock
* -> systray -> icons
*
* une zone comprend :
* - fond : couleur / opacité
* - contenu
* - largeur / hauteur
* - paddingx / paddingy
* - pixmap mémorisant l'affichage (évite de redessiner l'objet à chaque rafraichissement)
* - une liste de sous objets
*
* un objet comprend les actions:
* 1) redraw(obj)
* force l'indicateur 'redraw' sur l'objet
@@ -34,13 +32,8 @@
* 6) voir refresh(obj)
*
* Implémentation :
* - tous les éléments du panel possèdent 1 objet en début de structure
* panel, taskbar, systray, task, ...
* - l'objet est en fait une zone (area).
* l'imbrication des sous objet doit permettre de gérer le layout.
* - on a une relation 1<->1 entre un objet et une zone graphique
* les taskbar affichent toutes les taches.
* donc on utilise la liste des objets pour gérer la liste des taches.
* - les taches ont 2 objets : l'un pour la tache inactive et l'autre pour la tache active
* draw(obj) est appellé sur le premier objet automatiquement
* et draw_foreground(obj) lance l'affichage du 2 ieme objet
@@ -60,8 +53,6 @@
* 3. tester l'implémentation et évaluer les autres abstractions possibles ?
*
* 4. comment gérer le groupage des taches
* 5. la clock est le contenu du panel. mais elle ne tiens pas compte du padding vertical ?
* c'est ok pour la clock. voir l'impact sur paddingx ?
*
* voir resize_taskbar(), resize_clock() et resize_tasks()
* voir les taches actives et inactives ?? une seule tache est active !

View File

@@ -58,7 +58,7 @@ void set_close (Window win)
void window_toggle_shade (Window win)
{
send_event32 (win, server.atom._NET_WM_STATE, 2, 0);
send_event32 (win, server.atom._NET_WM_STATE, 2, server.atom._NET_WM_STATE_SHADED);
}
@@ -261,4 +261,3 @@ void get_text_size(PangoFontDescription *font, int *height_ink, int *height, int
}