1
0
Fork 0
mirror of https://github.com/davatorium/rofi.git synced 2025-03-03 16:05:20 -05:00

Initial pasting support.

This commit is contained in:
Qball Cow 2014-05-27 12:55:47 +02:00
parent 3188236121
commit ec538c64ea
3 changed files with 66 additions and 11 deletions

View file

@ -35,7 +35,7 @@
*
*/
void history_set ( const char *filename, const char *entry )
__attribute__((nonnull));
__attribute__( ( nonnull ) );
/**
@ -45,7 +45,7 @@ void history_set ( const char *filename, const char *entry )
* Removes the entry from the history.
*/
void history_remove ( const char *filename, const char *entry )
__attribute__((nonnull));
__attribute__( ( nonnull ) );
/**
@ -56,7 +56,7 @@ void history_remove ( const char *filename, const char *entry )
* @returns a list of entries length long. (and NULL terminated).
*/
char ** history_get_list ( const char *filename, unsigned int * length )
__attribute__((nonnull));
__attribute__( ( nonnull ) );

View file

@ -19,12 +19,12 @@ typedef struct
typedef enum
{
TB_AUTOHEIGHT = 1 << 0,
TB_AUTOWIDTH = 1 << 1,
TB_LEFT = 1 << 16,
TB_RIGHT = 1 << 17,
TB_CENTER = 1 << 18,
TB_EDITABLE = 1 << 19,
TB_AUTOHEIGHT = 1 << 0,
TB_AUTOWIDTH = 1 << 1,
TB_LEFT = 1 << 16,
TB_RIGHT = 1 << 17,
TB_CENTER = 1 << 18,
TB_EDITABLE = 1 << 19,
} TextboxFlags;
typedef enum
@ -52,8 +52,10 @@ void textbox_draw ( textbox *tb );
int textbox_keypress ( textbox *tb, XEvent *ev );
void textbox_cursor_end ( textbox *tb );
void textbox_cursor ( textbox *tb, int pos );
void textbox_move ( textbox *tb, int x, int y );
void textbox_insert ( textbox *tb, int pos, char *str );
/**
* @param tb Handle to the textbox
*

View file

@ -1276,6 +1276,51 @@ MenuReturn menu ( char **lines, char **input, char *prompt, Time *time, int *shi
line_height + ( config.padding ) + ( LINE_MARGIN - 2 ) / 2 );
}
}
else if ( ev.type == SelectionNotify )
{
// TODO move this.
Atom utf8 = XInternAtom ( display, "UTF8_STRING", False );
if ( ev.xselection.property == utf8 )
{
char *pbuf = NULL;
int di;
unsigned long dl, rm;
Atom da;
/* we have been given the current selection, now insert it into input */
XGetWindowProperty (
display,
main_window,
utf8,
0,
256 / 4, // max length in words.
False, // Do not delete clipboard.
utf8, &da, &di, &dl, &rm, (unsigned char * *) &pbuf );
// If There was remaining data left.. lets ignore this.
// Only accept it when we get bytes!
if ( di == 8 )
{
char *index;
if ( ( index = strchr ( pbuf, '\n' ) ) != NULL )
{
// Calc new length;
dl = index - pbuf;
}
// Create a NULL terminated string. I am not sure how the data is returned.
// With or without trailing 0
char str[dl + 1];
memcpy ( str, pbuf, dl );
str[dl] = '\0';
// Insert string move cursor.
textbox_insert ( text, text->cursor, str );
textbox_cursor ( text, text->cursor + dl );
// Force a redraw
textbox_draw ( text );
}
XFree ( pbuf );
}
}
else if ( ev.type == KeyPress )
{
while ( XCheckTypedEvent ( display, KeyPress, &ev ) )
@ -1290,8 +1335,16 @@ MenuReturn menu ( char **lines, char **input, char *prompt, Time *time, int *shi
KeySym key = XkbKeycodeToKeysym ( display, ev.xkey.keycode, 0, 0 );
if ( ( ( ev.xkey.state & ShiftMask ) == ShiftMask ) &&
key == XK_slash )
if ( ( ( ev.xkey.state & ControlMask ) == ControlMask ) && key == XK_v )
{
// TODO move these.
Atom clip = XInternAtom ( display, "CLIPBOARD", False );
Atom utf8 = XInternAtom ( display, "UTF8_STRING", False );
XConvertSelection ( display, ( ev.xkey.state & ShiftMask ) ? clip : XA_PRIMARY,
utf8, utf8, main_window, *time );
}
else if ( ( ( ev.xkey.state & ShiftMask ) == ShiftMask ) &&
key == XK_slash )
{
retv = MENU_NEXT;
*selected_line = 0;