mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-22 05:48:01 +01:00
WindowMaker: New function get_pixmap_icon_from_icon_win
The new function get_pixmap_icon_from_icon_win() splits the function wIconUpdate().
This commit is contained in:
committed by
Carlos R. Mafra
parent
ebe9a27e8d
commit
3adc058421
111
src/icon.c
111
src/icon.c
@@ -56,6 +56,7 @@ static void miniwindowExpose(WObjDescriptor * desc, XEvent * event);
|
|||||||
static void miniwindowMouseDown(WObjDescriptor * desc, XEvent * event);
|
static void miniwindowMouseDown(WObjDescriptor * desc, XEvent * event);
|
||||||
static void miniwindowDblClick(WObjDescriptor * desc, XEvent * event);
|
static void miniwindowDblClick(WObjDescriptor * desc, XEvent * event);
|
||||||
|
|
||||||
|
void get_pixmap_icon_from_icon_win(WIcon *icon);
|
||||||
/****** Notification Observers ******/
|
/****** Notification Observers ******/
|
||||||
|
|
||||||
static void appearanceObserver(void *self, WMNotification * notif)
|
static void appearanceObserver(void *self, WMNotification * notif)
|
||||||
@@ -565,56 +566,8 @@ void wIconUpdate(WIcon * icon)
|
|||||||
goto user_icon;
|
goto user_icon;
|
||||||
|
|
||||||
if (icon->icon_win != None) {
|
if (icon->icon_win != None) {
|
||||||
/* use client specified icon window */
|
/* Get the Pixmap from the WIcon */
|
||||||
XWindowAttributes attr;
|
get_pixmap_icon_from_icon_win(icon);
|
||||||
int resize = 0;
|
|
||||||
unsigned int width, height, depth;
|
|
||||||
int theight;
|
|
||||||
Pixmap pixmap;
|
|
||||||
|
|
||||||
getSize(icon->icon_win, &width, &height, &depth);
|
|
||||||
|
|
||||||
if (width > wPreferences.icon_size) {
|
|
||||||
resize = 1;
|
|
||||||
width = wPreferences.icon_size;
|
|
||||||
}
|
|
||||||
if (height > wPreferences.icon_size) {
|
|
||||||
resize = 1;
|
|
||||||
height = wPreferences.icon_size;
|
|
||||||
}
|
|
||||||
if (icon->show_title && (height + title_height < wPreferences.icon_size)) {
|
|
||||||
pixmap = XCreatePixmap(dpy, scr->w_win, wPreferences.icon_size,
|
|
||||||
wPreferences.icon_size, scr->w_depth);
|
|
||||||
XSetClipMask(dpy, scr->copy_gc, None);
|
|
||||||
XCopyArea(dpy, scr->icon_tile_pixmap, pixmap, scr->copy_gc, 0, 0,
|
|
||||||
wPreferences.icon_size, wPreferences.icon_size, 0, 0);
|
|
||||||
drawIconTitle(scr, pixmap, title_height);
|
|
||||||
theight = title_height;
|
|
||||||
} else {
|
|
||||||
pixmap = None;
|
|
||||||
theight = 0;
|
|
||||||
XSetWindowBackgroundPixmap(dpy, icon->core->window, scr->icon_tile_pixmap);
|
|
||||||
}
|
|
||||||
|
|
||||||
XSetWindowBorderWidth(dpy, icon->icon_win, 0);
|
|
||||||
XReparentWindow(dpy, icon->icon_win, icon->core->window,
|
|
||||||
(wPreferences.icon_size - width) / 2,
|
|
||||||
theight + (wPreferences.icon_size - height - theight) / 2);
|
|
||||||
if (resize)
|
|
||||||
XResizeWindow(dpy, icon->icon_win, width, height);
|
|
||||||
|
|
||||||
XMapWindow(dpy, icon->icon_win);
|
|
||||||
|
|
||||||
XAddToSaveSet(dpy, icon->icon_win);
|
|
||||||
|
|
||||||
icon->pixmap = pixmap;
|
|
||||||
|
|
||||||
if (XGetWindowAttributes(dpy, icon->icon_win, &attr)) {
|
|
||||||
if (attr.all_event_masks & ButtonPressMask)
|
|
||||||
wHackedGrabButton(Button1, MOD_MASK, icon->core->window, True,
|
|
||||||
ButtonPressMask, GrabModeSync, GrabModeAsync,
|
|
||||||
None, wCursor[WCUR_ARROW]);
|
|
||||||
}
|
|
||||||
} else if (wwin && wwin->net_icon_image) {
|
} else if (wwin && wwin->net_icon_image) {
|
||||||
/* Use _NET_WM_ICON icon */
|
/* Use _NET_WM_ICON icon */
|
||||||
icon->pixmap = makeIcon(scr, wwin->net_icon_image, icon->show_title,
|
icon->pixmap = makeIcon(scr, wwin->net_icon_image, icon->show_title,
|
||||||
@@ -723,6 +676,64 @@ void wIconUpdate(WIcon * icon)
|
|||||||
wIconPaint(icon);
|
wIconPaint(icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get the Pixmap from the WIcon of the WWindow */
|
||||||
|
void get_pixmap_icon_from_icon_win(WIcon * icon)
|
||||||
|
{
|
||||||
|
XWindowAttributes attr;
|
||||||
|
WScreen *scr = icon->core->screen_ptr;
|
||||||
|
int title_height = WMFontHeight(scr->icon_title_font);
|
||||||
|
unsigned int width, height, depth;
|
||||||
|
int theight;
|
||||||
|
int resize = 0;
|
||||||
|
Pixmap pixmap;
|
||||||
|
|
||||||
|
getSize(icon->icon_win, &width, &height, &depth);
|
||||||
|
|
||||||
|
if (width > wPreferences.icon_size) {
|
||||||
|
resize = 1;
|
||||||
|
width = wPreferences.icon_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (height > wPreferences.icon_size) {
|
||||||
|
resize = 1;
|
||||||
|
height = wPreferences.icon_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (icon->show_title && (height + title_height < wPreferences.icon_size)) {
|
||||||
|
pixmap = XCreatePixmap(dpy, scr->w_win, wPreferences.icon_size,
|
||||||
|
wPreferences.icon_size, scr->w_depth);
|
||||||
|
XSetClipMask(dpy, scr->copy_gc, None);
|
||||||
|
XCopyArea(dpy, scr->icon_tile_pixmap, pixmap, scr->copy_gc, 0, 0,
|
||||||
|
wPreferences.icon_size, wPreferences.icon_size, 0, 0);
|
||||||
|
drawIconTitle(scr, pixmap, title_height);
|
||||||
|
theight = title_height;
|
||||||
|
} else {
|
||||||
|
pixmap = None;
|
||||||
|
theight = 0;
|
||||||
|
XSetWindowBackgroundPixmap(dpy, icon->core->window, scr->icon_tile_pixmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
XSetWindowBorderWidth(dpy, icon->icon_win, 0);
|
||||||
|
XReparentWindow(dpy, icon->icon_win, icon->core->window,
|
||||||
|
(wPreferences.icon_size - width) / 2,
|
||||||
|
theight + (wPreferences.icon_size - height - theight) / 2);
|
||||||
|
if (resize)
|
||||||
|
XResizeWindow(dpy, icon->icon_win, width, height);
|
||||||
|
|
||||||
|
XMapWindow(dpy, icon->icon_win);
|
||||||
|
XAddToSaveSet(dpy, icon->icon_win);
|
||||||
|
|
||||||
|
/* Save it */
|
||||||
|
icon->pixmap = pixmap;
|
||||||
|
|
||||||
|
if ((XGetWindowAttributes(dpy, icon->icon_win, &attr)) &&
|
||||||
|
(attr.all_event_masks & ButtonPressMask))
|
||||||
|
wHackedGrabButton(Button1, MOD_MASK, icon->core->window, True,
|
||||||
|
ButtonPressMask, GrabModeSync, GrabModeAsync,
|
||||||
|
None, wCursor[WCUR_ARROW]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void wIconPaint(WIcon * icon)
|
void wIconPaint(WIcon * icon)
|
||||||
{
|
{
|
||||||
WScreen *scr = icon->core->screen_ptr;
|
WScreen *scr = icon->core->screen_ptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user