mirror of
https://github.com/amiwm/amiwm.git
synced 2026-03-24 01:24:15 +00:00
Merge pull request #11 from erikarn/main
[amiwm] lots of little fixes to amiwm over the last 6 months
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.o
|
||||
@@ -75,11 +75,11 @@ Currently the following are defined:
|
||||
rotatescreens - Move the frontmost screen to the back
|
||||
raisewindow - Rotate the bottom window to the top of the screen
|
||||
lowerwindow - Rotate the top window to the bottom of the screen
|
||||
rotatewindow - Move the current window to the next screen, rotate screen
|
||||
front - Move the window in which the key is pressed to the front
|
||||
back - Move the window in which the key is pressed to the back
|
||||
iconify - Iconify the window in which the key is pressed
|
||||
|
||||
|
||||
#### Example
|
||||
|
||||
Module "Keyboard" "\
|
||||
|
||||
@@ -66,7 +66,7 @@ lib_clean:
|
||||
menu.o: menu.c
|
||||
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -DAMIWM_HOME=\"$(AMIWM_HOME)\" $<
|
||||
|
||||
rc.o: rc.c
|
||||
rc.o: rc.c gram.h
|
||||
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -DAMIWM_HOME=\"$(AMIWM_HOME)\" $<
|
||||
|
||||
diskobject.o: diskobject.c
|
||||
|
||||
15
client.c
15
client.c
@@ -379,3 +379,18 @@ void flushclients()
|
||||
rmclient(c);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Reparent the given client to the given screen.
|
||||
*
|
||||
* This moves the given client to the given screen.
|
||||
*/
|
||||
void
|
||||
reparent_client(Scrn *s, Client *client)
|
||||
{
|
||||
client->scr = s;
|
||||
if(client->parent != client->scr->root)
|
||||
XReparentWindow(dpy, client->parent, s->back, client->x, client->y);
|
||||
setstringprop(client->window, amiwm_screen, s->deftitle);
|
||||
sendconfig(client);
|
||||
}
|
||||
|
||||
2
client.h
2
client.h
@@ -51,5 +51,7 @@ extern void getstate(Client *);
|
||||
extern void grav_map_frame_to_win(Client *, int, int, int *, int *);
|
||||
extern void grav_map_win_to_frame(Client *, int, int, int *, int *);
|
||||
extern void setclientstate(Client *, int);
|
||||
extern void reparent_client(struct _Scrn *s, Client *client);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
6
frame.c
6
frame.c
@@ -28,7 +28,7 @@ extern Display *dpy;
|
||||
extern XContext client_context, screen_context;
|
||||
extern Cursor wm_curs;
|
||||
extern int shape_extn;
|
||||
extern void redrawmenubar(Window);
|
||||
extern void redrawmenubar(Scrn *, Window);
|
||||
void reshape_frame(Client *c);
|
||||
|
||||
Window creategadget(Client *c, Window p, int x, int y, int w, int h)
|
||||
@@ -510,7 +510,7 @@ void clickenter()
|
||||
{
|
||||
if((scr=mbdscr)&& clickwindow == scr->menubardepth) {
|
||||
mbdclick = scr;
|
||||
redrawmenubar(scr->menubardepth);
|
||||
redrawmenubar(scr, scr->menubardepth);
|
||||
} else {
|
||||
scr = clickclient->scr;
|
||||
redraw(clickclient, clickclient->clicked=clickwindow);
|
||||
@@ -521,7 +521,7 @@ void clickleave()
|
||||
{
|
||||
if((scr=mbdscr)&& clickwindow == scr->menubardepth) {
|
||||
mbdclick = NULL;
|
||||
redrawmenubar(scr->menubardepth);
|
||||
redrawmenubar(scr, scr->menubardepth);
|
||||
} else {
|
||||
scr = clickclient->scr;
|
||||
clickclient->clicked=None;
|
||||
|
||||
7
icon.c
7
icon.c
@@ -156,12 +156,7 @@ void reparenticon(Icon *i, Scrn *s, int x, int y)
|
||||
i->next=s->icons;
|
||||
s->icons=i;
|
||||
if(i->client) {
|
||||
i->client->scr=s;
|
||||
if(i->client->parent != i->client->scr->root)
|
||||
XReparentWindow(dpy, i->client->parent, s->back,
|
||||
i->client->x, i->client->y);
|
||||
setstringprop(i->client->window, amiwm_screen, s->deftitle);
|
||||
sendconfig(i->client);
|
||||
reparent_client(s, i->client);
|
||||
}
|
||||
if(os)
|
||||
selecticon(i);
|
||||
|
||||
@@ -44,6 +44,7 @@ int parse_keyword(char *str, YYSTYPE *val)
|
||||
{ "lowerwindow", (mdfuncp)md_rotate_window_lower },
|
||||
{ "raisewindow", (mdfuncp)md_rotate_window_raise },
|
||||
{ "rotatescreens", (mdfuncp)k_rotscreens },
|
||||
{ "rotatewindow", (mdfuncp)md_rotate_window_desktop },
|
||||
};
|
||||
#define N_FUNC (sizeof(functab)/sizeof(functab[0]))
|
||||
struct { char *name; int token, num; } kwtab[] = {
|
||||
|
||||
@@ -370,6 +370,7 @@ extern int md_iconify(Window);
|
||||
extern int md_errormsg(Window, char *);
|
||||
extern int md_rotate_window_raise(Window);
|
||||
extern int md_rotate_window_lower(Window);
|
||||
extern int md_rotate_window_desktop(Window);
|
||||
|
||||
/* eventdispatcher.c */
|
||||
extern void cx_event_broker(int, unsigned long, int (*)(XEvent*));
|
||||
|
||||
@@ -32,6 +32,11 @@ int md_rotate_window_lower(XID id)
|
||||
return md_command00(id, MCMD_ROTATE_WINDOW_LOWER);
|
||||
}
|
||||
|
||||
int md_rotate_window_desktop(XID id)
|
||||
{
|
||||
return md_command00(id, MCMD_WINDOW_MOVE_NEXT_DESKTOP);
|
||||
}
|
||||
|
||||
int md_errormsg(Window id, char *str)
|
||||
{
|
||||
return md_command0(id, MCMD_ERRORMSG, str, strlen(str));
|
||||
|
||||
@@ -81,6 +81,13 @@ md_wait_read_fd(void)
|
||||
return (0);
|
||||
}
|
||||
if (ret < 0) {
|
||||
/*
|
||||
* Note: this happens during things like system suspend/resume
|
||||
* on FreeBSD.
|
||||
*/
|
||||
if (errno == EINTR) {
|
||||
return (0);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
if (FD_ISSET(md_in_fd, &readfds)) {
|
||||
|
||||
16
main.c
16
main.c
@@ -88,7 +88,7 @@ extern Scrn *mbdclick, *mbdscr;
|
||||
extern void reparent(Client *);
|
||||
extern void redraw(Client *, Window);
|
||||
extern void redrawclient(Client *);
|
||||
extern void redrawmenubar(Window);
|
||||
extern void redrawmenubar(Scrn *, Window);
|
||||
extern void gadgetclicked(Client *c, Window w, XEvent *e);
|
||||
extern void gadgetunclicked(Client *c, XEvent *e);
|
||||
extern void gadgetaborted(Client *c);
|
||||
@@ -283,7 +283,7 @@ void restorescreentitle(Scrn *s)
|
||||
{
|
||||
(scr=s)->title=s->deftitle;
|
||||
XClearWindow(dpy, s->menubar);
|
||||
redrawmenubar(s->menubar);
|
||||
redrawmenubar(s, s->menubar);
|
||||
if(free_screentitle) {
|
||||
free(free_screentitle);
|
||||
free_screentitle=NULL;
|
||||
@@ -295,7 +295,7 @@ void wberror(Scrn *s, char *message)
|
||||
remove_call_out((void(*)(void *))restorescreentitle, s);
|
||||
(scr=s)->title=message;
|
||||
XClearWindow(dpy, s->menubar);
|
||||
redrawmenubar(s->menubar);
|
||||
redrawmenubar(s, s->menubar);
|
||||
XBell(dpy, 100);
|
||||
call_out(2, 0, (void(*)(void *))restorescreentitle, s);
|
||||
}
|
||||
@@ -828,7 +828,7 @@ static void update_clock(void *dontcare)
|
||||
|
||||
scr = get_front_scr();
|
||||
do {
|
||||
redrawmenubar(scr->menubar);
|
||||
redrawmenubar(scr, scr->menubar);
|
||||
scr=scr->behind;
|
||||
} while(scr != get_front_scr());
|
||||
}
|
||||
@@ -1001,7 +1001,7 @@ int main(int argc, char *argv[])
|
||||
else if(i)
|
||||
redrawicon(i, event.xexpose.window);
|
||||
else if(scr)
|
||||
redrawmenubar(event.xexpose.window);
|
||||
redrawmenubar(scr, event.xexpose.window);
|
||||
if((rubberclient || boundingscr)&&!prefs.opaquemove) drawrubber();
|
||||
}
|
||||
break;
|
||||
@@ -1337,7 +1337,7 @@ int main(int argc, char *argv[])
|
||||
} else if(scr&&event.xbutton.window==scr->menubardepth) {
|
||||
clickwindow=scr->menubardepth;
|
||||
mbdclick=mbdscr=scr;
|
||||
redrawmenubar(scr->menubardepth);
|
||||
redrawmenubar(scr, scr->menubardepth);
|
||||
} else if(scr&&event.xbutton.window==scr->menubar &&
|
||||
scr->back!=scr->root) {
|
||||
startscreendragging(scr, &event);
|
||||
@@ -1352,7 +1352,7 @@ int main(int argc, char *argv[])
|
||||
else if(scr&&(scr==mbdscr)&&clickwindow==scr->menubardepth) {
|
||||
mbdclick=NULL;
|
||||
clickwindow=None;
|
||||
redrawmenubar(scr->menubardepth);
|
||||
redrawmenubar(scr, scr->menubardepth);
|
||||
} else if(clickclient)
|
||||
gadgetaborted(clickclient);
|
||||
else if(dragiconlist)
|
||||
@@ -1386,7 +1386,7 @@ int main(int argc, char *argv[])
|
||||
else if((scr=mbdscr)&& clickwindow==scr->menubardepth) {
|
||||
if(mbdclick) {
|
||||
mbdclick=NULL;
|
||||
redrawmenubar(scr->menubardepth);
|
||||
redrawmenubar(scr, scr->menubardepth);
|
||||
screentoback();
|
||||
}
|
||||
clickwindow=None;
|
||||
|
||||
2
menu.c
2
menu.c
@@ -494,7 +494,7 @@ void createmenubar()
|
||||
* This takes in the target window, which may be the basic menubar,
|
||||
* a clicked-on menu, or the depth widget.
|
||||
*/
|
||||
void redrawmenubar(Window w)
|
||||
void redrawmenubar(Scrn *scr, Window w)
|
||||
{
|
||||
static const char defaultTimeFormat[] = "%c";
|
||||
int widget_rhs;
|
||||
|
||||
15
module.c
15
module.c
@@ -45,6 +45,7 @@ extern void remove_fd_from_set(int);
|
||||
extern void screentoback();
|
||||
extern void raiselowerclient(Client *, int);
|
||||
extern void wberror(Scrn *, char *);
|
||||
extern void reparent(Client *);
|
||||
|
||||
extern Icon *createappicon(struct module *, Window, char *,
|
||||
Pixmap, Pixmap, Pixmap, int, int);
|
||||
@@ -525,6 +526,20 @@ static void handle_module_cmd(struct module *m, char *data, int data_len)
|
||||
reply_module(m, NULL, 0);
|
||||
break;
|
||||
}
|
||||
case MCMD_WINDOW_MOVE_NEXT_DESKTOP:
|
||||
/* Move the current window, if any, to the next desktop */
|
||||
c = NULL;
|
||||
if(! XFindContext(dpy, id, client_context, (XPointer*)&c)) {
|
||||
/* Get the current screen */
|
||||
scr=getscreen(id);
|
||||
/* Rotate screen, get the now front screen */
|
||||
screentoback();
|
||||
scr = get_front_scr();
|
||||
/* Assign this client to next screen */
|
||||
reparent_client(scr, c);
|
||||
}
|
||||
reply_module(m, NULL, 0);
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
reply_module(m, NULL, -1);
|
||||
|
||||
Reference in New Issue
Block a user