Enlightenment CVS committal Author : codewarrior Project : e17 Module : proto
Dir : e17/proto/estickies/src/bin Modified Files: about.c conf.c stickies.c Log Message: - shortcut info in about dialog - copy / cut / paste (text) support - fix note dragging - note: copy / cut currently copies/cuts all the text in the note. this might be due to an etk bug that should be fixed soon. =================================================================== RCS file: /cvs/e/e17/proto/estickies/src/bin/about.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- about.c 4 Aug 2006 04:30:40 -0000 1.1 +++ about.c 4 Aug 2006 15:05:20 -0000 1.2 @@ -11,6 +11,7 @@ Etk_Widget *logo; Etk_Widget *desctext; Etk_Widget *abouttext; + Etk_Widget *helptext; if(win) { @@ -63,9 +64,24 @@ "Brian 'morlenxus' Miculcy", ETK_TRUE); etk_container_add(ETK_CONTAINER(frame), abouttext); + etk_box_pack_start(ETK_BOX(vbox), frame, ETK_FALSE, ETK_FALSE, 0); + + /* Help */ + frame = etk_frame_new("Common shortcuts"); + helptext = etk_text_view_new(); + etk_widget_size_request_set(helptext, -1, 75); + etk_object_properties_set(ETK_OBJECT(helptext), + "focusable", ETK_FALSE, NULL); + etk_textblock_text_set(ETK_TEXT_VIEW(helptext)->textblock, + "<b>control-n:</b> create a new note\n" + "<b>control-q:</b> quit application\n" + "<b>control-c:</b> copy selected text\n" + "<b>control-x:</b> cut selected text\n" + "<b>control-v:</b> paste text from clipboard\n", + ETK_TRUE); + etk_container_add(ETK_CONTAINER(frame), helptext); etk_box_pack_start(ETK_BOX(vbox), frame, ETK_FALSE, ETK_FALSE, 0); - etk_dialog_pack_in_main_area(ETK_DIALOG(win), vbox, ETK_FALSE, ETK_FALSE, 0, ETK_FALSE); etk_dialog_button_add(ETK_DIALOG(win), "Close", ETK_RESPONSE_CLOSE); @@ -75,5 +91,7 @@ etk_textblock_object_cursor_visible_set(ETK_TEXT_VIEW(abouttext)->textblock_object, ETK_FALSE); etk_textblock_object_cursor_visible_set(ETK_TEXT_VIEW(desctext)->textblock_object, + ETK_FALSE); + etk_textblock_object_cursor_visible_set(ETK_TEXT_VIEW(helptext)->textblock_object, ETK_FALSE); } =================================================================== RCS file: /cvs/e/e17/proto/estickies/src/bin/conf.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- conf.c 31 Jul 2006 00:31:45 -0000 1.2 +++ conf.c 4 Aug 2006 15:05:20 -0000 1.3 @@ -187,6 +187,7 @@ if(!ecore_file_exists(buf) || ecore_file_size(buf) == 0) { /* no saved config */ + _e_about_show(); _e_config_defaults_apply(ss); return 0; } =================================================================== RCS file: /cvs/e/e17/proto/estickies/src/bin/stickies.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- stickies.c 4 Aug 2006 04:30:40 -0000 1.5 +++ stickies.c 4 Aug 2006 15:05:20 -0000 1.6 @@ -16,6 +16,7 @@ static void _e_sticky_focus_out_cb(Etk_Object *object, void *data); static void _e_sticky_sticky_cb(Etk_Object *object, const char *property_name, void *data); static void _e_sticky_delete_confirm_cb(Etk_Object *obj, int response_id, void *data); +static void _e_sticky_clipboard_text_request_cb(Etk_Object *object, void *event, void *data); static void _e_sticky_key_down_cb(Etk_Object *object, void *event, void *data) @@ -35,7 +36,6 @@ sn = _e_sticky_new(); ss->stickies = evas_list_append(ss->stickies, sn); _e_sticky_show(sn); - //printf("appending stick, total = %d\n", evas_list_count(ss->stickies)); } else if(!strcmp(ev->key, "d")) { @@ -44,7 +44,35 @@ else if(!strcmp(ev->key, "q")) { etk_main_quit(); - } + } + else if(!strcmp(ev->key, "c") || !strcmp(ev->key, "x")) + { + const char *text = NULL; + Etk_String *string = NULL; + Etk_Textblock_Iter *iter1; + Etk_Textblock_Iter *iter2; + + iter1 = etk_textblock_object_cursor_get(ETK_TEXT_VIEW(s->textview)->textblock_object); + iter2 = etk_textblock_object_selection_bound_get(ETK_TEXT_VIEW(s->textview)->textblock_object); + + string = etk_textblock_range_text_get( + ETK_TEXT_VIEW(s->textview)->textblock, + iter1, iter2, ETK_FALSE); + + if(string && (text = etk_string_get(string))) + { + etk_clipboard_text_set(s->textview, text, strlen(text) + 1); + etk_object_destroy(ETK_OBJECT(string)); + } + + if(!strcmp(ev->key, "x")) + etk_textblock_delete_range(ETK_TEXT_VIEW(s->textview)->textblock, + iter1, iter2); + } + else if(!strcmp(ev->key, "v")) + { + etk_clipboard_text_request(ETK_WIDGET(s->win)); + } } } @@ -87,11 +115,13 @@ s = data; ev = event; + + etk_window_geometry_get(ETK_WINDOW(s->win), &s->x, &s->y, NULL, NULL); if(_e_sticky_is_moving) { - _e_sticky_move(s, s->x + ev->cur.canvas.x - _e_sticky_mouse_x, - s->y + ev->cur.canvas.y - _e_sticky_mouse_y); + _e_sticky_move(s, s->x + ev->cur.widget.x - _e_sticky_mouse_x, + s->y + ev->cur.widget.y - _e_sticky_mouse_y); } } @@ -102,8 +132,12 @@ s = data; etk_window_geometry_get(ETK_WINDOW(s->win), &s->x, &s->y, NULL, NULL); - + { + /* FIXME: + * this bit of code forces estickies to only work on X11. + * we need to acquire this info through etk. + */ Ecore_X_Window root; int x, y, w, h; @@ -123,7 +157,8 @@ E_Sticky *s; s = data; - etk_window_geometry_get(ETK_WINDOW(s->win), NULL, NULL, &s->w, &s->h); + if(!_e_sticky_is_moving) + etk_window_geometry_get(ETK_WINDOW(s->win), NULL, NULL, &s->w, &s->h); } static int @@ -297,6 +332,7 @@ etk_box_pack_start(ETK_BOX(hbox), s->close_button, ETK_FALSE, ETK_FALSE, 0); s->textview = etk_text_view_new(); + etk_widget_repeat_mouse_events_set(s->textview, ETK_TRUE); if(s->text) etk_textblock_text_set(ETK_TEXT_VIEW(s->textview)->textblock, s->text, ETK_TRUE); @@ -306,7 +342,8 @@ etk_box_pack_start(ETK_BOX(vbox), s->textview, ETK_TRUE, ETK_TRUE, 0); etk_container_add(ETK_CONTAINER(s->win), vbox); - etk_widget_focus(s->textview); + etk_widget_focus(s->textview); + etk_signal_connect("clipboard_received", ETK_OBJECT(s->win), ETK_CALLBACK(_e_sticky_clipboard_text_request_cb), s); } E_Sticky * @@ -464,6 +501,29 @@ etk_object_destroy(obj); } +static void _e_sticky_clipboard_text_request_cb(Etk_Object *object, void *event, void *data) +{ + Etk_Event_Selection_Request *ev; + Etk_Selection_Data_Text *ev_text; + Etk_Textblock_Iter *cursor; + Etk_Textblock_Iter *selection; + E_Sticky *s; + + ev = event; + if(!(s = data) || !(ev_text = ev->data) || !(ev_text->text)) + return; + + cursor = etk_textblock_object_cursor_get(ETK_TEXT_VIEW(s->textview)->textblock_object); + selection = etk_textblock_object_selection_bound_get(ETK_TEXT_VIEW(s->textview)->textblock_object); + + /* TODO: + * handle the case where we are pasting and there's a selection + */ + + etk_textblock_insert(ETK_TEXT_VIEW(s->textview)->textblock, cursor, + ev_text->text, strlen(ev_text->text)); +} + int main(int argc, char **argv) { E_Sticky *s; @@ -480,7 +540,7 @@ if(ss->stickies) { Evas_List *l; - //printf("loading %d stickies!\n", evas_list_count(ss->stickies)); + for(l = ss->stickies; l; l = l->next) { _e_sticky_load_from(l->data); @@ -490,7 +550,6 @@ } else { - //printf("no stickies found\n"); s = _e_sticky_new(); ss->stickies = evas_list_append(ss->stickies, s); _e_sticky_show(s); ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs