forked from enlightenment/enlightenment
woop- middle button pastes and works! :)
SVN revision: 4317
This commit is contained in:
parent
49b72fb9fd
commit
bdbf267aeb
1
src/e.h
1
src/e.h
|
@ -557,6 +557,7 @@ struct _E_Entry
|
||||||
Evas_Object cursor;
|
Evas_Object cursor;
|
||||||
Evas_Object selection;
|
Evas_Object selection;
|
||||||
Evas_Object text;
|
Evas_Object text;
|
||||||
|
Window paste_win;
|
||||||
};
|
};
|
||||||
|
|
||||||
void e_entry_init(void);
|
void e_entry_init(void);
|
||||||
|
|
71
src/entry.c
71
src/entry.c
|
@ -1,5 +1,7 @@
|
||||||
#include "e.h"
|
#include "e.h"
|
||||||
|
|
||||||
|
static Evas_List entries;
|
||||||
|
|
||||||
static void e_entry_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y);
|
static void e_entry_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y);
|
||||||
static void e_entry_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y);
|
static void e_entry_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y);
|
||||||
static void e_entry_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y);
|
static void e_entry_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y);
|
||||||
|
@ -7,6 +9,49 @@ static void e_entry_realize(E_Entry *entry);
|
||||||
static void e_entry_unrealize(E_Entry *entry);
|
static void e_entry_unrealize(E_Entry *entry);
|
||||||
static void e_entry_configure(E_Entry *entry);
|
static void e_entry_configure(E_Entry *entry);
|
||||||
|
|
||||||
|
static void
|
||||||
|
e_paste_request(Eevent * ev)
|
||||||
|
{
|
||||||
|
Ev_Paste_Request *e;
|
||||||
|
Evas_List l;
|
||||||
|
|
||||||
|
e = ev->event;
|
||||||
|
for (l = entries; l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Entry *entry;
|
||||||
|
|
||||||
|
entry = l->data;
|
||||||
|
if (entry->paste_win == e->win)
|
||||||
|
{
|
||||||
|
char *str2;
|
||||||
|
char *type;
|
||||||
|
|
||||||
|
printf("destined for this entry!\n");
|
||||||
|
type = e->string;
|
||||||
|
if (entry->select.start >= 0)
|
||||||
|
{
|
||||||
|
str2 = strdup(e_entry_get_text(entry));
|
||||||
|
if (entry->select.start + entry->select.length > strlen(entry->buffer))
|
||||||
|
entry->select.length = strlen(entry->buffer) - entry->select.start;
|
||||||
|
strcpy(&(str2[entry->select.start]), &(entry->buffer[entry->select.start + entry->select.length]));
|
||||||
|
e_entry_set_text(entry, str2);
|
||||||
|
free(str2);
|
||||||
|
entry->cursor_pos = entry->select.start;
|
||||||
|
entry->select.start = -1;
|
||||||
|
}
|
||||||
|
str2 = malloc(strlen(e_entry_get_text(entry)) + 1 + strlen(type));
|
||||||
|
str2[0] = 0;
|
||||||
|
strncat(str2, entry->buffer, entry->cursor_pos);
|
||||||
|
strcat(str2, type);
|
||||||
|
strcat(str2, &(entry->buffer[entry->cursor_pos]));
|
||||||
|
e_entry_set_text(entry, str2);
|
||||||
|
free(str2);
|
||||||
|
entry->cursor_pos+=strlen(type);
|
||||||
|
e_entry_configure(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
e_entry_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
e_entry_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
||||||
{
|
{
|
||||||
|
@ -19,26 +64,12 @@ e_entry_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
||||||
char *str2;
|
char *str2;
|
||||||
char *type = "Inserted";
|
char *type = "Inserted";
|
||||||
|
|
||||||
if (entry->select.start >= 0)
|
|
||||||
{
|
{
|
||||||
str2 = strdup(e_entry_get_text(entry));
|
if (entry->paste_win) e_window_destroy(entry->paste_win);
|
||||||
if (entry->select.start + entry->select.length > strlen(entry->buffer))
|
printf("e_selection_request();\n");
|
||||||
entry->select.length = strlen(entry->buffer) - entry->select.start;
|
entry->paste_win = e_selection_request();
|
||||||
strcpy(&(str2[entry->select.start]), &(entry->buffer[entry->select.start + entry->select.length]));
|
|
||||||
e_entry_set_text(entry, str2);
|
|
||||||
free(str2);
|
|
||||||
entry->cursor_pos = entry->select.start;
|
|
||||||
entry->select.start = -1;
|
|
||||||
}
|
}
|
||||||
str2 = malloc(strlen(e_entry_get_text(entry)) + 1 + strlen(type));
|
|
||||||
str2[0] = 0;
|
|
||||||
strncat(str2, entry->buffer, entry->cursor_pos);
|
|
||||||
strcat(str2, type);
|
|
||||||
strcat(str2, &(entry->buffer[entry->cursor_pos]));
|
|
||||||
e_entry_set_text(entry, str2);
|
|
||||||
free(str2);
|
|
||||||
entry->cursor_pos+=strlen(type);
|
|
||||||
e_entry_configure(entry);
|
|
||||||
}
|
}
|
||||||
else if (!entry->mouse_down)
|
else if (!entry->mouse_down)
|
||||||
{
|
{
|
||||||
|
@ -241,11 +272,14 @@ e_entry_configure(E_Entry *entry)
|
||||||
void
|
void
|
||||||
e_entry_init(void)
|
e_entry_init(void)
|
||||||
{
|
{
|
||||||
|
e_event_filter_handler_add(EV_PASTE_REQUEST, e_paste_request);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
e_entry_free(E_Entry *entry)
|
e_entry_free(E_Entry *entry)
|
||||||
{
|
{
|
||||||
|
entries = evas_list_remove(entries, entry);
|
||||||
|
FREE(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
E_Entry *
|
E_Entry *
|
||||||
|
@ -257,6 +291,7 @@ e_entry_new(void)
|
||||||
ZERO(entry, E_Entry, 1);
|
ZERO(entry, E_Entry, 1);
|
||||||
entry->buffer=strdup("");
|
entry->buffer=strdup("");
|
||||||
entry->select.start = -1;
|
entry->select.start = -1;
|
||||||
|
entries = evas_list_prepend(entries, entry);
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue