Issue: #224 test version window current desktop

run: rofi -show windowcd -modi windowcd,window

Using ctrl-tab you can switch between two modes (all windows, or just current desktop).
This commit is contained in:
Dave Davenport 2015-09-07 17:41:48 +02:00
parent ca602383f1
commit 092a2c5037
3 changed files with 46 additions and 3 deletions

View file

@ -2,4 +2,5 @@
#define __WINDOW_DIALOG_H__ #define __WINDOW_DIALOG_H__
extern Switcher window_mode; extern Switcher window_mode;
extern Switcher window_mode_cd;
#endif // __WINDOW_DIALOG_H__ #endif // __WINDOW_DIALOG_H__

View file

@ -171,8 +171,12 @@ static int winlist_find ( winlist *l, Window w )
*/ */
static void x11_cache_create ( void ) static void x11_cache_create ( void )
{ {
cache_client = winlist_new (); if ( cache_client == NULL ) {
cache_xattr = winlist_new (); cache_client = winlist_new ();
}
if ( cache_xattr == NULL ) {
cache_xattr = winlist_new ();
}
} }
/** /**
@ -364,7 +368,7 @@ static void window_mode_init ( Switcher *sw )
} }
} }
static char ** window_mode_get_data ( unsigned int *length, Switcher *sw ) static char ** _window_mode_get_data ( unsigned int *length, Switcher *sw, unsigned int cd )
{ {
SwitcherModePrivateData *pd = (SwitcherModePrivateData *) sw->private_data; SwitcherModePrivateData *pd = (SwitcherModePrivateData *) sw->private_data;
if ( !pd->init ) { if ( !pd->init ) {
@ -389,6 +393,12 @@ static char ** window_mode_get_data ( unsigned int *length, Switcher *sw )
curr_win_id = 0; curr_win_id = 0;
} }
// Get the current desktop.
unsigned long current_desktop = 0;
if ( !window_get_cardinal_prop ( display, root, netatoms[_NET_CURRENT_DESKTOP], &current_desktop, 1 ) ) {
current_desktop = 0;
}
if ( window_get_prop ( display, root, netatoms[_NET_CLIENT_LIST_STACKING], if ( window_get_prop ( display, root, netatoms[_NET_CLIENT_LIST_STACKING],
&type, &nwins, wins, 100 * sizeof ( Window ) ) &type, &nwins, wins, 100 * sizeof ( Window ) )
&& type == XA_WINDOW ) { && type == XA_WINDOW ) {
@ -457,6 +467,10 @@ static char ** window_mode_get_data ( unsigned int *length, Switcher *sw )
// Assume the client is on all desktops. // Assume the client is on all desktops.
wmdesktop = 0xFFFFFFFF; wmdesktop = 0xFFFFFFFF;
} }
else if ( cd && wmdesktop != current_desktop ) {
g_free ( line );
continue;
}
if ( wmdesktop < 0xFFFFFFFF ) { if ( wmdesktop < 0xFFFFFFFF ) {
sprintf ( desktop, "%d", (int) wmdesktop ); sprintf ( desktop, "%d", (int) wmdesktop );
@ -477,6 +491,14 @@ static char ** window_mode_get_data ( unsigned int *length, Switcher *sw )
*length = pd->cmd_list_length; *length = pd->cmd_list_length;
return pd->cmd_list; return pd->cmd_list;
} }
static char ** window_mode_get_data_cd ( unsigned int *length, Switcher *sw )
{
return _window_mode_get_data ( length, sw, TRUE );
}
static char ** window_mode_get_data ( unsigned int *length, Switcher *sw )
{
return _window_mode_get_data ( length, sw, FALSE );
}
static SwitcherMode window_mode_result ( int mretv, G_GNUC_UNUSED char **input, unsigned int selected_line, Switcher *sw ) static SwitcherMode window_mode_result ( int mretv, G_GNUC_UNUSED char **input, unsigned int selected_line, Switcher *sw )
{ {
SwitcherModePrivateData *rmpd = (SwitcherModePrivateData *) sw->private_data; SwitcherModePrivateData *rmpd = (SwitcherModePrivateData *) sw->private_data;
@ -556,3 +578,19 @@ Switcher window_mode =
.private_data = NULL, .private_data = NULL,
.free = NULL .free = NULL
}; };
Switcher window_mode_cd =
{
.name = "windowcd",
.tb = NULL,
.keycfg = NULL,
.keystr = NULL,
.modmask = AnyModifier,
.init = window_mode_init,
.get_data = window_mode_get_data_cd,
.result = window_mode_result,
.destroy = window_mode_destroy,
.token_match = window_match,
.mgrv = mgrv,
.private_data = NULL,
.free = NULL
};

View file

@ -1593,6 +1593,10 @@ static void setup_switchers ( void )
switchers[num_switchers] = &window_mode; switchers[num_switchers] = &window_mode;
num_switchers++; num_switchers++;
} }
else if ( strcasecmp ( token, "windowcd" ) == 0 ) {
switchers[num_switchers] = &window_mode_cd;
num_switchers++;
}
// SSh dialog // SSh dialog
else if ( strcasecmp ( token, "ssh" ) == 0 ) { else if ( strcasecmp ( token, "ssh" ) == 0 ) {
switchers[num_switchers] = &ssh_mode; switchers[num_switchers] = &ssh_mode;