/* * This file is part of firk's window manager for x11 (fwm) * Copyright (C) 2016-2021 firk * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * This program 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 this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include "main.h" #include "base.h" #include "xkrap.h" #include "xsupp.h" #define draw_string XDrawString /* some wrappers for x */ extern void draw_string_limwidth(Display * dis, Drawable d, GC gc, int x, int y, int mw, char const * st, size_t len) { int dw, w; w = text_width(gc, st, len); if(w<=mw) { draw_string(display, d, gc, x, y, st, len); return; } dw = text_width(gc, "...",3); if(mwmw-dw) { len--; w = text_width(gc, st, len); } if(!len) draw_string(display, d, gc, x, y, "...", 3); else { draw_string(display, d, gc, x, y, st, len); draw_string(display, d, gc, x+w, y, "...", 3); } } extern void draw_string_limwidth_utf8(Display * dis, Drawable d, GC gc, int x, int y, int mw, char const * st, size_t len) { int dw, w; w=text_width_utf8(gc, st, len); if(w<=mw) { draw_string_utf8(display, d, gc, x, y, st, len); return; } dw = text_width(gc, "...",3); if(mwmw-dw) { len--; w = text_width_utf8(gc, st, len); } if(!len) draw_string(display, d, gc, x, y, "...", 3); else { draw_string_utf8(display, d, gc, x, y, st, len); draw_string(display, d, gc, x+w, y, "...", 3); } } extern void place_window_below(Display * dis, Window w, Window from) { XWindowChanges chg; bzero(&chg, sizeof(chg)); chg.sibling = from; chg.stack_mode = Below; XConfigureWindow(dis, w, CWSibling | CWStackMode, &chg); } extern void place_window_above(Display * dis, Window w, Window from) { XWindowChanges chg; bzero(&chg, sizeof(chg)); chg.sibling = from; chg.stack_mode = Above; XConfigureWindow(dis, w, CWSibling | CWStackMode, &chg); } extern void place_window_ontop(Display * dis, Window w) { XRaiseWindow(dis, w); }