EAPI E_Gadcon_Popup * e_gadcon_popup_new(E_Gadcon_Client *gcc) { E_Gadcon_Popup *pop; Evas_Object *o; E_Zone *zone; pop = E_OBJECT_ALLOC(E_Gadcon_Popup, E_GADCON_POPUP_TYPE, _e_gadcon_popup_free); if (!pop) return NULL; zone = e_gadcon_client_zone_get(gcc); pop->win = e_popup_new(zone, 0, 0, 0, 0); e_popup_layer_set(pop->win, 350); o = edje_object_add(pop->win->evas); e_theme_edje_object_set(o, "base/theme/gadman", "e/gadman/popup"); evas_object_show(o); evas_object_move(o, 0, 0); e_popup_edje_bg_object_set(pop->win, o); pop->o_bg = o; pop->gcc = gcc; pop->gadcon_lock = 1; pop->gadcon_was_locked = 0; return pop; }
/* Externally accesible functions */ EAPI E_Entry_Dialog * e_entry_dialog_show(const char *title, const char *icon, const char *text, const char *initial_text, const char *button_text, const char *button2_text, void (*ok_func)(void *data, char *text), void (*cancel_func)(void *data), void *data) { E_Entry_Dialog *ed; E_Dialog *dia; Evas_Object *o, *ob; Evas_Modifier_Mask mask; int w, h; ed = E_OBJECT_ALLOC(E_Entry_Dialog, E_ENTRY_DIALOG_TYPE, _e_entry_dialog_free); ed->ok.func = ok_func; ed->ok.data = data; ed->cancel.func = cancel_func; ed->cancel.data = data; if (initial_text) ed->text = strdup(initial_text); dia = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_entry_dialog"); if (!dia) { e_object_del(E_OBJECT(ed)); return NULL; } dia->data = ed; ed->dia = dia; mask = 0; evas_object_key_ungrab(dia->event_object, "space", mask, ~mask); e_object_del_attach_func_set(E_OBJECT(dia), _e_entry_dia_del); e_win_delete_callback_set(dia->win, _e_entry_dialog_delete); if (title) e_dialog_title_set(dia, title); if (icon) e_dialog_icon_set(dia, icon, 64); o = e_widget_list_add(dia->win->evas, 0, 0); if (text) { ob = e_widget_label_add(dia->win->evas, text); e_widget_list_object_append(o, ob, 1, 0, 0.5); } ed->entry = e_widget_entry_add(dia->win->evas, &(ed->text), NULL, NULL, NULL); evas_object_smart_callback_add(ed->entry, "key_down", _e_entry_cb_key_down, ed); e_widget_list_object_append(o, ed->entry, 1, 1, 0.5); e_widget_size_min_get(o, &w, &h); e_dialog_content_set(dia, o, w, h); e_dialog_button_add(dia, !button_text ? _("OK") : button_text, NULL, _e_entry_dialog_ok, ed); e_dialog_button_add(dia, !button2_text ? _("Cancel") : button2_text, NULL, _e_entry_dialog_cancel, ed); e_win_centered_set(dia->win, 1); e_dialog_show(dia); e_widget_focus_set(ed->entry, 1); e_editable_select_all(e_widget_entry_editable_object_get(ed->entry)); return ed; }
/********** externally accesible functions ****************/ EAPI E_Confirm_Dialog * e_confirm_dialog_show(const char *title, const char *icon, const char *text, const char *button_text, const char *button2_text, void (*func)(void *data), void (*func2)(void *data), void *data, void *data2, void (*del_func)(void *data), void *del_data) { E_Confirm_Dialog *cd; E_Dialog *dia; cd = E_OBJECT_ALLOC(E_Confirm_Dialog, E_CONFIRM_DIALOG_TYPE, _e_confirm_dialog_free); cd->yes.func = func; cd->yes.data = data; cd->no.func = func2; cd->no.data = data2; cd->del.func = del_func; cd->del.data = del_data; dia = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_confirm_dialog"); if (!dia) { e_object_del(E_OBJECT(cd)); return NULL; } dia->data = cd; cd->dia = dia; e_win_delete_callback_set(dia->win, _e_confirm_dialog_delete); if (title) e_dialog_title_set(dia, title); if (icon) e_dialog_icon_set(dia, icon, 64); if (text) e_dialog_text_set(dia, text); e_dialog_button_add(dia, !button_text ? _("Yes") : button_text, NULL, _e_confirm_dialog_yes, cd); e_dialog_button_add(dia, !button2_text ? _("No") : button2_text, NULL, _e_confirm_dialog_no, cd); e_dialog_button_focus_num(dia, 1); e_win_centered_set(dia->win, 1); e_dialog_show(dia); return cd; }
/** * Create a color selector dialog. * * @param c compositor to display on * @param color color to initialize to (or NULL for black). * @param alpha_enabled if set, uses alpha and let user edit it. */ E_Color_Dialog * e_color_dialog_new(E_Comp *c, const E_Color *color, Eina_Bool alpha_enabled) { E_Color_Dialog *dia; Evas_Object *o; Evas_Coord mw, mh; dia = E_OBJECT_ALLOC(E_Color_Dialog, E_COLOR_DIALOG_TYPE, _e_color_dialog_free); if (!dia) return NULL; dia->dia = e_dialog_new(c, "E", "_color_dialog"); e_dialog_title_set(dia->dia, _("Color Selector")); dia->color = calloc(1, sizeof(E_Color)); dia->initial = calloc(1, sizeof(E_Color)); if (color) e_color_copy(color, dia->color); if ((!color) || (!alpha_enabled)) dia->color->a = 255; e_color_copy(dia->color, dia->initial); o = e_widget_csel_add(dia->dia->win->evas, dia->color, alpha_enabled); evas_object_show(o); e_widget_size_min_get(o, &mw, &mh); e_dialog_content_set(dia->dia, o, mw, mh); e_widget_on_change_hook_set(o, _e_color_dialog_cb_csel_change, dia); /* buttons at the bottom */ e_dialog_button_add(dia->dia, _("Select"), NULL, _e_color_dialog_button1_click, dia); e_dialog_button_add(dia->dia, _("Cancel"), NULL, _e_color_dialog_button2_click, dia); e_win_centered_set(dia->dia->win, 1); dia->dia->data = dia; e_object_del_attach_func_set(E_OBJECT(dia->dia), _e_color_dialog_dia_del); return dia; }
EAPI E_Popup * e_popup_new(E_Zone *zone, int x, int y, int w, int h) { E_Popup *pop; pop = E_OBJECT_ALLOC(E_Popup, E_POPUP_TYPE, _e_popup_free); if (!pop) return NULL; pop->zone = zone; pop->x = x; pop->y = y; pop->w = w; pop->h = h; pop->layer = 250; pop->ecore_evas = e_canvas_new(pop->zone->container->win, pop->zone->x + pop->x, pop->zone->y + pop->y, pop->w, pop->h, 1, 1, &(pop->evas_win)); if (!pop->ecore_evas) { free(pop); return NULL; } /* avoid excess exposes when shaped - set damage avoid to 1 */ // ecore_evas_avoid_damage_set(pop->ecore_evas, 1); e_canvas_add(pop->ecore_evas); pop->shape = e_container_shape_add(pop->zone->container); e_container_shape_move(pop->shape, pop->zone->x + pop->x, pop->zone->y + pop->y); e_container_shape_resize(pop->shape, pop->w, pop->h); pop->evas = ecore_evas_get(pop->ecore_evas); e_container_window_raise(pop->zone->container, pop->evas_win, pop->layer); ecore_x_window_shape_events_select(pop->evas_win, 1); ecore_evas_name_class_set(pop->ecore_evas, "E", "_e_popup_window"); ecore_evas_title_set(pop->ecore_evas, "E Popup"); e_object_ref(E_OBJECT(pop->zone)); pop->zone->popups = eina_list_append(pop->zone->popups, pop); _e_popup_list = eina_list_append(_e_popup_list, pop); eina_hash_add(_e_popup_hash, e_util_winid_str_get(pop->evas_win), pop); return pop; }
EAPI E_Obj_Dialog * e_obj_dialog_new(E_Container *con, char *title, char *class_name, char *class_class) { E_Obj_Dialog *od; E_Manager *man; Evas_Object *o; if (!con) { man = e_manager_current_get(); if (!man) return NULL; con = e_container_current_get(man); if (!con) con = e_container_number_get(man, 0); if (!con) return NULL; } od = E_OBJECT_ALLOC(E_Obj_Dialog, E_OBJ_DIALOG_TYPE, _e_obj_dialog_free); if (!od) return NULL; od->win = e_win_new(con); if (!od->win) { free(od); return NULL; } e_win_delete_callback_set(od->win, _e_obj_dialog_cb_delete); e_win_resize_callback_set(od->win, _e_obj_dialog_cb_resize); od->win->data = od; e_win_dialog_set(od->win, 1); e_win_name_class_set(od->win, class_name, class_class); e_win_title_set(od->win, title); o = edje_object_add(e_win_evas_get(od->win)); od->bg_object = o; e_win_centered_set(od->win, 1); od->cb_delete = NULL; return od; }
static void _e_dialog_cb_wid_on_focus(void *data, Evas_Object *obj); /* local subsystem globals */ /* externally accessible functions */ static E_Dialog * _e_dialog_internal_new(Evas_Object *parent, const char *name, const char *class, int dialog) { E_Dialog *dia; Evas_Object *o; Evas_Modifier_Mask mask; Eina_Bool kg; Evas *e; dia = E_OBJECT_ALLOC(E_Dialog, E_DIALOG_TYPE, _e_dialog_free); if (!dia) return NULL; if (dialog) dia->win = elm_win_add(parent, name, ELM_WIN_DIALOG_BASIC); else dia->win = elm_win_add(parent, name, ELM_WIN_BASIC); if (!dia->win) { free(dia); return NULL; } elm_win_modal_set(dia->win, !!parent); e = evas_object_evas_get(dia->win); evas_object_event_callback_add(dia->win, EVAS_CALLBACK_DEL, _e_dialog_cb_delete, dia); ecore_evas_name_class_set(ecore_evas_ecore_evas_get(e), name, class); dia->bg_object = o = elm_layout_add(dia->win);
Ind_Win * e_mod_ind_win_new(E_Zone *zone) { Ind_Win *iwin; Ecore_X_Window_State states[2]; Evas_Coord h = 0; /* create our new indicator window object */ iwin = E_OBJECT_ALLOC(Ind_Win, IND_WIN_TYPE, _e_mod_ind_win_cb_free); if (!iwin) return NULL; h = (il_ind_cfg->height * e_scale); iwin->zone = zone; /* create new window */ iwin->win = e_win_new(zone->container); iwin->win->data = iwin; /* set some properties on the window */ e_win_title_set(iwin->win, _("Illume Indicator")); e_win_name_class_set(iwin->win, "Illume-Indicator", "Illume-Indicator"); e_win_no_remember_set(iwin->win, EINA_TRUE); /* hook into window resize so we can resize our objects */ e_win_resize_callback_set(iwin->win, _e_mod_ind_win_cb_resize); /* set this window to not show in taskbar or pager */ states[0] = ECORE_X_WINDOW_STATE_SKIP_TASKBAR; states[1] = ECORE_X_WINDOW_STATE_SKIP_PAGER; ecore_x_netwm_window_state_set(iwin->win->evas_win, states, 2); /* set this window to not accept or take focus */ ecore_x_icccm_hints_set(iwin->win->evas_win, 0, 0, 0, 0, 0, 0, 0); /* create the popup */ iwin->popup = e_popup_new(zone, 0, 0, zone->w, h); e_popup_name_set(iwin->popup, "indicator"); e_popup_layer_set(iwin->popup, 200); /* create our event rectangle */ iwin->o_event = evas_object_rectangle_add(iwin->win->evas); evas_object_color_set(iwin->o_event, 0, 0, 0, 0); evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_DOWN, _e_mod_ind_win_cb_mouse_down, iwin); evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_UP, _e_mod_ind_win_cb_mouse_up, iwin); evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_MOVE, _e_mod_ind_win_cb_mouse_move, iwin); evas_object_move(iwin->o_event, 0, 0); evas_object_show(iwin->o_event); /* create our base object */ iwin->o_base = edje_object_add(iwin->win->evas); if (!e_theme_edje_object_set(iwin->o_base, "base/theme/modules/illume-indicator", "modules/illume-indicator/window")) { char buff[PATH_MAX]; snprintf(buff, sizeof(buff), "%s/e-module-illume-indicator.edj", _ind_mod_dir); edje_object_file_set(iwin->o_base, buff, "modules/illume-indicator/window"); } evas_object_move(iwin->o_base, 0, 0); evas_object_show(iwin->o_base); e_popup_edje_bg_object_set(iwin->popup, iwin->o_base); /* create our gadget container */ iwin->gadcon = e_gadcon_swallowed_new("illume-indicator", zone->id, iwin->o_base, "e.swallow.content"); edje_extern_object_min_size_set(iwin->gadcon->o_container, zone->w, h); e_gadcon_min_size_request_callback_set(iwin->gadcon, _e_mod_ind_win_cb_min_size_request, iwin); e_gadcon_size_request_callback_set(iwin->gadcon, _e_mod_ind_win_cb_size_request, iwin); e_gadcon_frame_request_callback_set(iwin->gadcon, _e_mod_ind_win_cb_frame_request, iwin); e_gadcon_orient(iwin->gadcon, E_GADCON_ORIENT_FLOAT); e_gadcon_zone_set(iwin->gadcon, zone); e_gadcon_ecore_evas_set(iwin->gadcon, iwin->win->ecore_evas); e_gadcon_util_menu_attach_func_set(iwin->gadcon, _e_mod_ind_win_cb_menu_items_append, iwin); e_gadcon_populate(iwin->gadcon); /* hook into property change so we can adjust w/ e_scale */ iwin->hdls = eina_list_append(iwin->hdls, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, _e_mod_ind_win_cb_win_prop, iwin)); /* hook into zone resize so we can set minimum window width when zone * size changes */ iwin->hdls = eina_list_append(iwin->hdls, ecore_event_handler_add(E_EVENT_ZONE_MOVE_RESIZE, _e_mod_ind_win_cb_zone_resize, iwin)); iwin->hdls = eina_list_append(iwin->hdls, ecore_event_handler_add(E_EVENT_BORDER_HIDE, _e_mod_ind_win_cb_border_hide, iwin)); iwin->hdls = eina_list_append(iwin->hdls, ecore_event_handler_add(E_EVENT_BORDER_SHOW, _e_mod_ind_win_cb_border_show, iwin)); /* set minimum size of this window & popup */ e_win_size_min_set(iwin->win, zone->w, h); ecore_evas_size_min_set(iwin->popup->ecore_evas, zone->w, h); /* position and resize this window */ e_win_move_resize(iwin->win, zone->x, zone->y, zone->w, h); e_popup_move_resize(iwin->popup, zone->x, zone->y, zone->w, h); /* show the window */ e_win_show(iwin->win); e_popup_show(iwin->popup); /* set this window on proper zone */ e_border_zone_set(iwin->win->border, zone); iwin->win->border->user_skip_winlist = 1; iwin->win->border->lock_focus_in = 1; iwin->win->border->lock_focus_out = 1; /* set this window to be a dock window. This needs to be done after show * as E will sometimes reset the window type */ ecore_x_netwm_window_type_set(iwin->win->evas_win, ECORE_X_WINDOW_TYPE_DOCK); /* tell conformant apps our position and size */ ecore_x_e_illume_indicator_geometry_set(zone->black_win, zone->x, zone->y, zone->w, h); return iwin; }
* @param parent the parent dialog * @param title to display for the dialog * @param name the name used to register the window in e * @param class the call used to register the window in e * @param icon the path to the icon file * @param icon_size is of the width and height of the icon * @param view the callbacks used to create the dialog and save the settings * @param data additional data to attach to the dialog, will be passed to the callbacks * @return returns the created dialog. Null on failure */ E_API E_Config_Dialog * e_config_dialog_new(Evas_Object *parent, const char *title, const char *name, const char *class, const char *icon, int icon_size, E_Config_Dialog_View *view, void *data) { E_Config_Dialog *cfd; cfd = E_OBJECT_ALLOC(E_Config_Dialog, E_CONFIG_DIALOG_TYPE, _e_config_dialog_free); cfd->view = view; cfd->parent = parent; cfd->title = eina_stringshare_add(title); cfd->name = eina_stringshare_add(name); cfd->class = eina_stringshare_add(class); if (icon) { cfd->icon = eina_stringshare_add(icon); cfd->icon_size = icon_size; } cfd->data = data; cfd->hide_buttons = 1; cfd->cfg_changed = 0; cfd->cfg_changed_auto = 1;