From: <enl...@li...> - 2002-02-24 04:43:32
|
Enlightenment CVS committal Author : atmosphere Project : e17 Module : apps/ebony Dir : e17/apps/ebony/src Modified Files: callbacks.c interface.c Log Message: Slightly more organized recent bg list. Allow fill size greater then 1.0 Some documentation =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/ebony/src/callbacks.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- callbacks.c 20 Feb 2002 00:48:20 -0000 1.7 +++ callbacks.c 24 Feb 2002 04:43:30 -0000 1.8 @@ -7,6 +7,10 @@ int idle = 0; +/** + * ebony_status_clear - clear the current text in the statusbar + * @data - ignored + */ gint ebony_status_clear(gpointer data) { @@ -14,6 +18,11 @@ return FALSE; UN(data); } +/** + * ebony_status_message - display a message in the statusbar + * @message - the text to display in the statusbar + * @delay - the timeout before the text is deleted + */ void ebony_status_message(gchar *message, gint delay) { @@ -23,13 +32,22 @@ UN(delay); UN(message); } +/** + * redraw - render the evas + * @data - ignored + */ int redraw(void *data) { evas_render(evas); return(FALSE); } - +/** + * drawing_area_configure_event - resize the bg's evas request + * @w - ignored + * @ev - ignored + * @data - ignored + */ gboolean drawing_area_configure_event(GtkWidget *w, GdkEventConfigure *ev, gpointer data) { @@ -40,6 +58,12 @@ DRAW(); return(FALSE); } +/** + * drawing_area_expose_event - expose event on the bg's evas + * @w - ignored + * @ev - ignored + * @data - ignored + */ gboolean drawing_area_expose_event(GtkWidget *w, GdkEventExpose *ev, gpointer data) { @@ -48,6 +72,11 @@ DRAW(); return(FALSE); } +/** + * save_bg - save the current background in context to disk + * @w - ignored + * @data - ignored + */ void save_bg(GtkWidget *w, gpointer data) { @@ -65,49 +94,39 @@ UN(w); UN(data); } +/** + * save_as_ok_clicked - ok clicked on the save as file selection + * @w - the ok button + * @data - the file selection + */ void save_as_ok_clicked(GtkWidget *w, gpointer data) { - E_Background _bg; gchar *file; gchar errstr[1024]; file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data)); if(!file) return; - - _bg = bg; fill_background_images(bg); + clear_bg_db_keys(bg); e_bg_save(bg, (char*)file); - bg = e_bg_load((char*)file); - if(bg) - { - char buf[PATH_MAX]; - if(_bg) e_bg_free(_bg); - e_bg_add_to_evas(bg, evas); - e_bg_set_layer(bg, 0); - e_bg_show(bg); - DRAW(); - - g_snprintf(errstr, 1024, "Saved background: %s", (char*)file); - ebony_status_message(errstr, EBONY_STATUS_TO); - snprintf(buf, PATH_MAX, "Ebony - %s", (char*)file); - gtk_window_set_title(GTK_WINDOW(win_ref), buf); - } - else - { - g_snprintf(errstr, 1024, "Unable to save %s", (char*)file); - ebony_status_message(errstr, EBONY_STATUS_TO); - bg = _bg; - } + open_bg_named((char*)file); + g_snprintf(errstr, 1024, "Saved background: %s", (char*)file); + ebony_status_message(errstr, EBONY_STATUS_TO); + gtk_widget_destroy(GTK_WIDGET(data)); return; UN(w); UN(data); } - +/** + * save_as_cancel_clicked - cancel clicked on save as file selection + * @w - ignored + * @data - the file selection to destroy + */ void save_as_cancel_clicked(GtkWidget *w, gpointer data) { @@ -116,7 +135,11 @@ UN(w); UN(data); } - +/** + * save_bg_as - save as request, create a file selection + * @w - ignored + * @data - ignored + */ void save_bg_as(GtkWidget *w, gpointer data) { @@ -135,6 +158,12 @@ UN(w); UN(data); } +/** + * advanced_widgets_show_for_images - show widgets for an image layer + * Only certain widgets in the advanced interface are applicable to layers + * that are of type E_BACKGROUND_TYPE_IMAGE hide the rest so it's less + * confusing. + */ void advanced_widgets_show_for_image(void) { @@ -155,6 +184,12 @@ w = gtk_object_get_data(GTK_OBJECT(win_ref), "size_orig_h"); if(w) gtk_widget_set_sensitive(w, TRUE); } +/** + * advanced_widgets_show_for_gradient - show widgets for a gradient layer + * Only certain widgets in the advanced interface are applicable to layers + * that are of type E_BACKGROUND_TYPE_GRADIENT hide the rest so it's less + * confusing. + */ void advanced_widgets_show_for_gradient(void) { @@ -175,6 +210,12 @@ w = gtk_object_get_data(GTK_OBJECT(win_ref), "size_orig_h"); if(w) gtk_widget_set_sensitive(w, FALSE); } +/** + * advanced_widgets_show_for_color - show widgets for a color layer + * Only certain widgets in the advanced interface are applicable to layers + * that are of type E_BACKGROUND_TYPE_SOLID hide the rest so it's less + * confusing. + */ void advanced_widgets_show_for_color(void) { @@ -195,6 +236,11 @@ w = gtk_object_get_data(GTK_OBJECT(win_ref), "size_orig_h"); if(w) gtk_widget_set_sensitive(w, FALSE); } +/** + * new_bg - create a new E_Background and show it in the evas + * @w - ignored + * @data - ignored + */ void new_bg(GtkWidget *w, void *data) { @@ -217,6 +263,74 @@ UN(w); UN(data); } + +/** + * add_bg_filename_to_recent_menu - recent menu in realtime + * @filename - the file to add to the recently load bg menu + * Add filename to the recent menu so multiple bgs opened in one session are + * avaiable from the menu list + */ +void +add_bg_filename_to_recent_menu(char *filename) +{ + GtkWidget *mi; + GtkWidget *menu; + char *short_name; + + short_name = get_shortname_for(filename); + mi = gtk_menu_item_new_with_label(short_name); + + menu = gtk_object_get_data(GTK_OBJECT(win_ref), "recent_menu"); + gtk_menu_append(GTK_MENU(menu), mi); + gtk_signal_connect(GTK_OBJECT(mi), "activate", + GTK_SIGNAL_FUNC(open_bg), (gpointer)filename); + gtk_widget_show(mi); +} +/** + * handle_recent_bgs_append - append the file to recent bg list + * @name - the filename on disk + * If the file name already exists in the list, remove it and append it to + * the list, if the list is full pop the first element and append the + * filename to the recent_bgs list + */ +static void +handle_recent_bgs_append(char *name) +{ + GList *l; + int ok, length; + char *str; + + ok = 1; + for(l = recent_bgs; l; l = l->next) + { + if(!strcmp((char*)l->data, name)) + { + recent_bgs = g_list_remove(recent_bgs, l->data); + free((char*)l->data); + ok = 0; + } + } + if(!ok) + { + char *bg_to_pop = NULL; + length = 0; + for(l = recent_bgs; (l) && (length < 5); l = l->next) length++; + if(length == 4) + { + bg_to_pop = g_list_nth_data(recent_bgs, 0); + recent_bgs = g_list_remove(recent_bgs, (gpointer)bg_to_pop); + free((char*)bg_to_pop); + } + } + str = strdup((char*)name); + recent_bgs = g_list_append(recent_bgs, str); +} +/** + * open_bg_named - have ebony load the bg named name + * @name - the filename on disk + * Handle the freeing of the old bg, and loading of the new bg, plus keep up + * with the recently used bg stuff + */ void open_bg_named(char *name) { @@ -231,15 +345,29 @@ snprintf(buf, 256, "Ebony - %s", name); gtk_window_set_title(GTK_WINDOW(win_ref), buf); + add_bg_filename_to_recent_menu(name); + handle_recent_bgs_append(name); e_bg_free(bg); display_bg(_bg); bg = _bg; } + else + { + gchar errstr[1024]; + + g_snprintf(errstr, 1024, "Unable to load %s", name); + ebony_status_message(errstr, EBONY_STATUS_TO); + } return; UN(name); } +/** + * filemenu_load_cancel_clicked - select a file and click cancel + * @w - the ok button + * @data - pointer to the fileselection the user chose from + */ static void filemenu_load_cancel_clicked(GtkWidget *w, gpointer data) { @@ -248,53 +376,29 @@ UN(w); UN(data); } - +/** + * filemenu_load_ok_clicked - select a file and click ok + * @w - the ok button + * @data - pointer to the fileselection the user chose from + */ static void filemenu_load_ok_clicked(GtkWidget *w, gpointer data) { - gchar *file; - E_Background _bg; - - file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data)); - - _bg = bg; - - _bg = e_bg_load((char*)file); - if(_bg) - { - GList *l; - int length = 0; - char *file_on_disk; - - if(bg) e_bg_free(bg); - display_bg(_bg); - bg = _bg; - for(l = recent_bgs; (l) && (length < 5); l = l->next) length++; - if(length == 4) /* full list */ - { - char *bg_to_pop = NULL; - bg_to_pop = g_list_nth_data(recent_bgs, 0); - recent_bgs = g_list_remove(recent_bgs, (gpointer)bg_to_pop); - free((char*)bg_to_pop); - } - file_on_disk = strdup((char*)file); - recent_bgs = g_list_append(recent_bgs, file_on_disk); - } - else - { - gchar errstr[1024]; - - g_snprintf(errstr, 1024, "Unable to load %s", (char*)file); - ebony_status_message(errstr, EBONY_STATUS_TO); - } + gchar *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data)); + if(file) open_bg_named((char*)file); gtk_widget_destroy(GTK_WIDGET(data)); return; UN(w); UN(data); } +/** + * open_bg_cb - create a file selection to open a background + * @w - ignored + * @data - ignored + */ void -open_bg(GtkWidget *w, gpointer data) +open_bg_cb(GtkWidget *w, gpointer data) { GtkWidget *fs; @@ -311,8 +415,13 @@ UN(w); UN(data); } +/** + * open_bg - open background file data points to + * @w - Any widget + * @data - The char* string for the filename on disk + */ void -open_bg_cb(GtkWidget *w, gpointer data) +open_bg(GtkWidget *w, gpointer data) { if(!data) return; open_bg_named((char*)data); @@ -320,6 +429,11 @@ UN(w); UN(data); } +/** + * get_range_value - get the value from the named GtkRange + * @named - the name of the gtk range + * Returns the double value of the range + */ double get_range_value(char *named) { @@ -331,6 +445,11 @@ result = (gtk_range_get_adjustment(GTK_RANGE(w))->value); return(result); } +/** + * on_scroll_changed - set the scroll for the image layer + * @w - the modified range + * @data - ignored + */ void on_scroll_changed(GtkWidget *w, gpointer data) { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/ebony/src/interface.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- interface.c 20 Feb 2002 00:48:20 -0000 1.6 +++ interface.c 24 Feb 2002 04:43:31 -0000 1.7 @@ -15,17 +15,42 @@ UN(w); UN(data); } - +static GtkWidget * +add_recent_bgs_to_filemenu(GtkWidget *win) +{ + GList *l; + GtkWidget *menu, *mi; + + menu = gtk_menu_new(); + gtk_widget_ref(menu); + gtk_object_set_data_full(GTK_OBJECT(win), "recent_menu", menu, + (GtkDestroyNotify)gtk_widget_unref); + + recent_bgs = parse_ebony_bg_list_db(); + for(l = recent_bgs; l; l = l->next) + { + char *txt = (char*)l->data; + char *short_txt = get_shortname_for(txt); + mi = gtk_menu_item_new_with_label(short_txt); + gtk_menu_append(GTK_MENU(menu), mi); + gtk_signal_connect(GTK_OBJECT(mi), "activate", + GTK_SIGNAL_FUNC(open_bg), (gpointer)txt); + gtk_widget_show(mi); + } + + gtk_widget_show(menu); + + return(menu); +} /** * create_ebony_filemenu - Create the Filemenu widget and return it * return Completely built menu, AND widget needs to be shown elsewhere */ static GtkWidget * -create_ebony_filemenu(void) +create_ebony_filemenu(GtkWidget *win) { GtkWidget *result; - GtkWidget *menu, *m, *mi; - GList *l; + GtkWidget *menu, *m, *mi, *recent_menu; result = gtk_menu_bar_new(); @@ -44,26 +69,20 @@ mi = gtk_menu_item_new_with_label("Open"); gtk_menu_append(GTK_MENU(menu), mi); gtk_signal_connect(GTK_OBJECT(mi), "activate", - GTK_SIGNAL_FUNC(open_bg), NULL); + GTK_SIGNAL_FUNC(open_bg_cb), NULL); gtk_widget_show(mi); mi = gtk_menu_item_new(); gtk_menu_append(GTK_MENU(menu), mi); gtk_widget_show(mi); + + mi = gtk_menu_item_new_with_label("Recent"); + gtk_menu_append(GTK_MENU(menu), mi); + gtk_widget_show(mi); - /* FIXME Parse recent bgs list */ - recent_bgs = parse_ebony_bg_list_db(); - for(l = recent_bgs; l; l = l->next) - { - char *txt = (char*)l->data; - char *short_txt = get_shortname_for(txt); - mi = gtk_menu_item_new_with_label(short_txt); - gtk_menu_append(GTK_MENU(menu), mi); - gtk_signal_connect(GTK_OBJECT(mi), "activate", - GTK_SIGNAL_FUNC(open_bg_cb), (gpointer)txt); - gtk_widget_show(mi); - } - + recent_menu = add_recent_bgs_to_filemenu(win); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(mi), recent_menu); + gtk_widget_show(mi); /* */ mi = gtk_menu_item_new(); gtk_menu_append(GTK_MENU(menu), mi); @@ -657,7 +676,7 @@ GTK_SHRINK, 2, 2); gtk_widget_show(label); - o = gtk_adjustment_new(0.0, 0.0, 1.0, 0.01, 0.1, 2.5); + o = gtk_adjustment_new(0.0, 0.0, 100.0, 0.01, 0.1, 2.5); spin_button = gtk_spin_button_new(GTK_ADJUSTMENT(o), 0.01, 2); gtk_widget_ref(spin_button); @@ -685,7 +704,7 @@ GTK_SHRINK, 2, 2); gtk_widget_show(label); - o = gtk_adjustment_new(0.0, 0.0, 1.0, 0.01, 0.1, 2.5); + o = gtk_adjustment_new(0.0, 0.0, 100.0, 0.01, 0.1, 2.5); spin_button = gtk_spin_button_new(GTK_ADJUSTMENT(o), 0.01, 2); gtk_widget_ref(spin_button); @@ -1033,7 +1052,7 @@ gtk_signal_connect(GTK_OBJECT(result), "delete_event", GTK_SIGNAL_FUNC(app_exit), NULL); - menu = create_ebony_filemenu(); + menu = create_ebony_filemenu(result); hpaned = create_ebony_main_section(result); vbox = gtk_vbox_new(FALSE, 1); |