woop- middle button pastes and works! :)

SVN revision: 4317
This commit is contained in:
Carsten Haitzler 2001-03-06 02:09:32 +00:00
parent 49b72fb9fd
commit bdbf267aeb
2 changed files with 54 additions and 18 deletions

View File

@ -557,6 +557,7 @@ struct _E_Entry
Evas_Object cursor;
Evas_Object selection;
Evas_Object text;
Window paste_win;
};
void e_entry_init(void);

View File

@ -1,5 +1,7 @@
#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_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);
@ -7,6 +9,49 @@ static void e_entry_realize(E_Entry *entry);
static void e_entry_unrealize(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
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 *type = "Inserted";
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;
if (entry->paste_win) e_window_destroy(entry->paste_win);
printf("e_selection_request();\n");
entry->paste_win = e_selection_request();
}
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)
{
@ -241,11 +272,14 @@ e_entry_configure(E_Entry *entry)
void
e_entry_init(void)
{
e_event_filter_handler_add(EV_PASTE_REQUEST, e_paste_request);
}
void
e_entry_free(E_Entry *entry)
{
entries = evas_list_remove(entries, entry);
FREE(entry);
}
E_Entry *
@ -257,6 +291,7 @@ e_entry_new(void)
ZERO(entry, E_Entry, 1);
entry->buffer=strdup("");
entry->select.start = -1;
entries = evas_list_prepend(entries, entry);
return entry;
}