mirror of https://github.com/davatorium/rofi.git
parent
b665e85e69
commit
ba6a055683
|
@ -905,7 +905,8 @@ Window create_window ( Display *display )
|
||||||
config.menu_bw,
|
config.menu_bw,
|
||||||
color_get ( display, config.menu_bc ),
|
color_get ( display, config.menu_bc ),
|
||||||
color_get ( display, config.menu_bg ) );
|
color_get ( display, config.menu_bg ) );
|
||||||
XSelectInput ( display, box, ExposureMask );
|
|
||||||
|
XSelectInput ( display, box, ExposureMask | ButtonPressMask );
|
||||||
|
|
||||||
gc = XCreateGC ( display, box, 0, 0 );
|
gc = XCreateGC ( display, box, 0, 0 );
|
||||||
XSetLineAttributes ( display, gc, 2, LineOnOffDash, CapButt, JoinMiter );
|
XSetLineAttributes ( display, gc, 2, LineOnOffDash, CapButt, JoinMiter );
|
||||||
|
@ -978,6 +979,7 @@ static void calculate_window_position ( const workarea *mon, int *x, int *y, int
|
||||||
MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prompt, Time *time,
|
MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prompt, Time *time,
|
||||||
int *shift, menu_match_cb mmc, void *mmc_data, int *selected_line, int sorting )
|
int *shift, menu_match_cb mmc, void *mmc_data, int *selected_line, int sorting )
|
||||||
{
|
{
|
||||||
|
Time last_press = 0;
|
||||||
int retv = MENU_CANCEL;
|
int retv = MENU_CANCEL;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
unsigned int columns = config.menu_columns;
|
unsigned int columns = config.menu_columns;
|
||||||
|
@ -1148,7 +1150,8 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;; ) {
|
int quit = FALSE;
|
||||||
|
while ( !quit ) {
|
||||||
// If something changed, refilter the list. (paste or text entered)
|
// If something changed, refilter the list. (paste or text entered)
|
||||||
if ( refilter ) {
|
if ( refilter ) {
|
||||||
if ( strlen ( text->text ) > 0 ) {
|
if ( strlen ( text->text ) > 0 ) {
|
||||||
|
@ -1253,6 +1256,43 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom
|
||||||
line_height + ( config.padding ) + ( LINE_MARGIN - 2 ) / 2 );
|
line_height + ( config.padding ) + ( LINE_MARGIN - 2 ) / 2 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if ( ev.type == ButtonPress ) {
|
||||||
|
XButtonEvent *xbe = (XButtonEvent *) &( ev.xbutton );
|
||||||
|
if ( xbe->window == arrowbox_top->window ) {
|
||||||
|
// Page up.
|
||||||
|
if ( selected < max_rows ) {
|
||||||
|
selected = 0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
selected -= max_elements;
|
||||||
|
}
|
||||||
|
update = TRUE;
|
||||||
|
}
|
||||||
|
else if ( xbe->window == arrowbox_bottom->window ) {
|
||||||
|
// Page down.
|
||||||
|
selected += max_elements;
|
||||||
|
if ( selected >= filtered_lines ) {
|
||||||
|
selected = filtered_lines - 1;
|
||||||
|
}
|
||||||
|
update = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for ( int i = 0; i < max_elements; i++ ) {
|
||||||
|
if ( ( xbe->window ) == ( boxes[i]->window ) ) {
|
||||||
|
selected = last_offset + i;
|
||||||
|
update = TRUE;
|
||||||
|
if ( ( xbe->time - last_press ) < 200 ) {
|
||||||
|
retv = MENU_OK;
|
||||||
|
*selected_line = line_map[selected];
|
||||||
|
// Quit
|
||||||
|
quit = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
last_press = xbe->time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else if ( ev.type == SelectionNotify ) {
|
else if ( ev.type == SelectionNotify ) {
|
||||||
// TODO move this.
|
// TODO move this.
|
||||||
if ( ev.xselection.property == netatoms[UTF8_STRING] ) {
|
if ( ev.xselection.property == netatoms[UTF8_STRING] ) {
|
||||||
|
@ -1319,6 +1359,7 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom
|
||||||
key == XK_slash ) {
|
key == XK_slash ) {
|
||||||
retv = MENU_NEXT;
|
retv = MENU_NEXT;
|
||||||
*selected_line = 0;
|
*selected_line = 0;
|
||||||
|
quit = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if ( ( ( ev.xkey.state & ShiftMask ) == ShiftMask ) &&
|
else if ( ( ( ev.xkey.state & ShiftMask ) == ShiftMask ) &&
|
||||||
|
@ -1326,6 +1367,7 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom
|
||||||
if ( filtered[selected] != NULL ) {
|
if ( filtered[selected] != NULL ) {
|
||||||
*selected_line = line_map[selected];
|
*selected_line = line_map[selected];
|
||||||
retv = MENU_ENTRY_DELETE;
|
retv = MENU_ENTRY_DELETE;
|
||||||
|
quit = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1333,6 +1375,7 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom
|
||||||
key >= XK_1 && key <= XK_9 ) {
|
key >= XK_1 && key <= XK_9 ) {
|
||||||
*selected_line = ( key - XK_1 );
|
*selected_line = ( key - XK_1 );
|
||||||
retv = MENU_QUICK_SWITCH;
|
retv = MENU_QUICK_SWITCH;
|
||||||
|
quit = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1350,6 +1393,7 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom
|
||||||
retv = MENU_CUSTOM_INPUT;
|
retv = MENU_CUSTOM_INPUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
quit = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if ( rc ) {
|
else if ( rc ) {
|
||||||
|
@ -1367,6 +1411,7 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom
|
||||||
|| ( ( sshdialog_modmask == AnyModifier || ev.xkey.state & sshdialog_modmask ) && key == sshdialog_keysym )
|
|| ( ( sshdialog_modmask == AnyModifier || ev.xkey.state & sshdialog_modmask ) && key == sshdialog_keysym )
|
||||||
) {
|
) {
|
||||||
retv = MENU_CANCEL;
|
retv = MENU_CANCEL;
|
||||||
|
quit = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
@ -1447,6 +1492,7 @@ MenuReturn menu ( char **lines, unsigned int num_lines, char **input, char *prom
|
||||||
if ( filtered_lines == 0 && key == prev_key ) {
|
if ( filtered_lines == 0 && key == prev_key ) {
|
||||||
retv = MENU_NEXT;
|
retv = MENU_NEXT;
|
||||||
*selected_line = 0;
|
*selected_line = 0;
|
||||||
|
quit = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|
|
@ -96,11 +96,16 @@ textbox* textbox_create ( Window parent,
|
||||||
// auto height/width modes get handled here
|
// auto height/width modes get handled here
|
||||||
textbox_moveresize ( tb, tb->x, tb->y, tb->w, tb->h );
|
textbox_moveresize ( tb, tb->x, tb->y, tb->w, tb->h );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// edit mode controls
|
// edit mode controls
|
||||||
if ( tb->flags & TB_EDITABLE ) {
|
if ( tb->flags & TB_EDITABLE ) {
|
||||||
tb->xim = XOpenIM ( display, NULL, NULL, NULL );
|
tb->xim = XOpenIM ( display, NULL, NULL, NULL );
|
||||||
tb->xic = XCreateIC ( tb->xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, XNClientWindow, tb->window, XNFocusWindow, tb->window, NULL );
|
tb->xic = XCreateIC ( tb->xim, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, XNClientWindow, tb->window, XNFocusWindow, tb->window, NULL );
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
XSelectInput ( display, tb->window, ButtonPressMask );
|
||||||
|
}
|
||||||
|
|
||||||
return tb;
|
return tb;
|
||||||
}
|
}
|
||||||
|
@ -345,6 +350,7 @@ int textbox_keypress ( textbox *tb, XEvent *ev )
|
||||||
char pad[32];
|
char pad[32];
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
|
|
||||||
if ( !( tb->flags & TB_EDITABLE ) ) {
|
if ( !( tb->flags & TB_EDITABLE ) ) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue