mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Implemented old #93 request: panel feature to be placed on screen by dragging (only putting it to top and bottom are available) and setting panel percentage width.
This commit is contained in:
parent
9d38486f61
commit
dcd742392f
@ -177,8 +177,8 @@ Panel::Panel() : PanelWindow(300, 30) {
|
|||||||
clicked = 0;
|
clicked = 0;
|
||||||
sx = sy = 0;
|
sx = sy = 0;
|
||||||
vpos = PANEL_POSITION_BOTTOM;
|
vpos = PANEL_POSITION_BOTTOM;
|
||||||
screen_x = screen_y = screen_w = screen_h = 0;
|
screen_x = screen_y = screen_w = screen_h = screen_h_half = 0;
|
||||||
screen_h_half = 0;
|
width_perc = 100;
|
||||||
can_move_widgets = false;
|
can_move_widgets = false;
|
||||||
|
|
||||||
box(FL_UP_BOX);
|
box(FL_UP_BOX);
|
||||||
@ -190,17 +190,26 @@ void Panel::read_config(void) {
|
|||||||
if(!r.load("ede-panel"))
|
if(!r.load("ede-panel"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int p;
|
int tmp;
|
||||||
if(r.get("Panel", "position", p, PANEL_POSITION_BOTTOM)) {
|
if(r.get("Panel", "position", tmp, PANEL_POSITION_BOTTOM)) {
|
||||||
if((p != PANEL_POSITION_TOP) && (p != PANEL_POSITION_BOTTOM))
|
if((tmp != PANEL_POSITION_TOP) && (tmp != PANEL_POSITION_BOTTOM))
|
||||||
p = PANEL_POSITION_BOTTOM;
|
tmp = PANEL_POSITION_BOTTOM;
|
||||||
|
vpos = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
vpos = p;
|
if(r.get("Panel", "width", tmp, 100)) {
|
||||||
|
if(tmp > 100) tmp = 100;
|
||||||
|
else if(tmp < 10) tmp = 10;
|
||||||
|
|
||||||
|
width_perc = tmp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Panel::save_config(void) {
|
void Panel::save_config(void) {
|
||||||
Resource r;
|
Resource r;
|
||||||
|
/* use whatever was explicitly stored in configuration */
|
||||||
|
r.load("ede-panel");
|
||||||
|
|
||||||
r.set("Panel", "position", vpos);
|
r.set("Panel", "position", vpos);
|
||||||
r.save("ede-panel");
|
r.save("ede-panel");
|
||||||
}
|
}
|
||||||
@ -321,12 +330,19 @@ void Panel::show(void) {
|
|||||||
if(!netwm_workarea_get_size(X, Y, W, H))
|
if(!netwm_workarea_get_size(X, Y, W, H))
|
||||||
Fl::screen_xywh(X, Y, W, H);
|
Fl::screen_xywh(X, Y, W, H);
|
||||||
|
|
||||||
|
/* TODO: these numbers are also used to calculate panel x,y,w,h so rename it! */
|
||||||
screen_x = X;
|
screen_x = X;
|
||||||
screen_y = Y;
|
screen_y = Y;
|
||||||
screen_w = W;
|
screen_w = W;
|
||||||
screen_h = H;
|
screen_h = H;
|
||||||
screen_h_half = screen_h / 2;
|
screen_h_half = screen_h / 2;
|
||||||
|
|
||||||
|
/* calculate panel percentage width if given */
|
||||||
|
if(width_perc < 100) {
|
||||||
|
W = (width_perc * screen_w) / 100;
|
||||||
|
screen_x = (screen_w / 2) - (W / 2);
|
||||||
|
}
|
||||||
|
|
||||||
/* set size as soon as possible, since do_layout() depends on it */
|
/* set size as soon as possible, since do_layout() depends on it */
|
||||||
size(W, DEFAULT_PANEL_H);
|
size(W, DEFAULT_PANEL_H);
|
||||||
|
|
||||||
@ -336,11 +352,13 @@ void Panel::show(void) {
|
|||||||
/* position it, this is done after XID was created */
|
/* position it, this is done after XID was created */
|
||||||
if(vpos == PANEL_POSITION_BOTTOM) {
|
if(vpos == PANEL_POSITION_BOTTOM) {
|
||||||
position(screen_x, screen_h - h());
|
position(screen_x, screen_h - h());
|
||||||
netwm_window_set_strut(fl_xid(this), 0, 0, 0, h());
|
if(width_perc >= 100)
|
||||||
|
netwm_window_set_strut(fl_xid(this), 0, 0, 0, h());
|
||||||
} else {
|
} else {
|
||||||
/* FIXME: this does not work well with edewm (nor pekwm). kwin do it correctly. */
|
/* FIXME: this does not work well with edewm (nor pekwm). kwin do it correctly. */
|
||||||
position(screen_x, screen_y);
|
position(screen_x, screen_y);
|
||||||
netwm_window_set_strut(fl_xid(this), 0, 0, h(), 0);
|
if(width_perc >= 100)
|
||||||
|
netwm_window_set_strut(fl_xid(this), 0, 0, h(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -370,13 +388,15 @@ int Panel::handle(int e) {
|
|||||||
/* snap it to the top or bottom, depending on pressed mouse location */
|
/* snap it to the top or bottom, depending on pressed mouse location */
|
||||||
if(Fl::event_y_root() <= screen_h_half && y() > screen_h_half) {
|
if(Fl::event_y_root() <= screen_h_half && y() > screen_h_half) {
|
||||||
position(screen_x, screen_y);
|
position(screen_x, screen_y);
|
||||||
netwm_window_set_strut(fl_xid(this), 0, 0, h(), 0);
|
if(width_perc >= 100)
|
||||||
|
netwm_window_set_strut(fl_xid(this), 0, 0, h(), 0);
|
||||||
vpos = PANEL_POSITION_TOP;
|
vpos = PANEL_POSITION_TOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Fl::event_y_root() > screen_h_half && y() < screen_h_half) {
|
if(Fl::event_y_root() > screen_h_half && y() < screen_h_half) {
|
||||||
position(screen_x, screen_h - h());
|
position(screen_x, screen_h - h());
|
||||||
netwm_window_set_strut(fl_xid(this), 0, 0, 0, h());
|
if(width_perc >= 100)
|
||||||
|
netwm_window_set_strut(fl_xid(this), 0, 0, 0, h());
|
||||||
vpos = PANEL_POSITION_BOTTOM;
|
vpos = PANEL_POSITION_BOTTOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ private:
|
|||||||
int vpos;
|
int vpos;
|
||||||
int sx, sy;
|
int sx, sy;
|
||||||
int screen_x, screen_y, screen_w, screen_h, screen_h_half;
|
int screen_x, screen_y, screen_w, screen_h, screen_h_half;
|
||||||
|
int width_perc; /* user specified panel width */
|
||||||
bool can_move_widgets;
|
bool can_move_widgets;
|
||||||
|
|
||||||
AppletManager mgr;
|
AppletManager mgr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user