1 #include "e_illume_private.h"
2 #include "e_mod_select_window.h"
4 /* local function prototypes */
5 static void *_e_mod_illume_config_select_window_create_data(E_Config_Dialog *cfd);
6 static void _e_mod_illume_config_select_window_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata);
7 static Evas_Object *_e_mod_illume_config_select_window_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata);
8 static void _e_mod_illume_config_select_window_list_changed(void *data);
9 static Eina_Bool _e_mod_illume_config_select_window_change_timeout(void *data);
10 static int _e_mod_illume_config_select_window_match(E_Border *bd);
13 E_Illume_Select_Window_Type stype;
14 Ecore_Timer *_sw_change_timer = NULL;
16 /* public functions */
18 e_mod_illume_config_select_window(E_Illume_Select_Window_Type type)
21 E_Config_Dialog_View *v;
23 if (e_config_dialog_find("E", "_config_illume_select_window")) return;
25 v = E_NEW(E_Config_Dialog_View, 1);
29 v->create_cfdata = _e_mod_illume_config_select_window_create_data;
30 v->free_cfdata = _e_mod_illume_config_select_window_free_data;
31 v->basic.create_widgets = _e_mod_illume_config_select_window_create;
35 cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
36 _("Select Home Window"), "E",
37 "_config_illume_select_window",
38 "enlightenment/windows", 0, v, NULL);
40 e_dialog_resizable_set(cfd->dia, 1);
44 _e_mod_illume_config_select_window_create_data(E_Config_Dialog *cfd __UNUSED__)
50 _e_mod_illume_config_select_window_free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata __UNUSED__)
52 if (_sw_change_timer) ecore_timer_del(_sw_change_timer);
53 _sw_change_timer = NULL;
57 _e_mod_illume_config_select_window_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata __UNUSED__)
59 Evas_Object *list, *ow;
64 zone = e_util_zone_current_get(e_manager_current_get());
65 list = e_widget_list_add(evas, 0, 0);
66 ow = e_widget_ilist_add(evas, 24, 24, NULL);
67 e_widget_ilist_selector_set(ow, 1);
68 evas_event_freeze(evas);
70 e_widget_ilist_freeze(ow);
71 e_widget_ilist_clear(ow);
72 e_widget_ilist_go(ow);
74 if ((bds = e_border_client_list()))
76 for (i = 0, l = bds; l; l = l->next, i++)
81 if (!(bd = l->data)) continue;
82 if (bd->zone != zone) continue;
83 if (e_object_is_del(E_OBJECT(bd))) continue;
84 if (!(name = e_border_name_get(bd))) continue;
85 if (_e_mod_illume_config_select_window_match(bd)) sel = i;
86 e_widget_ilist_append(ow, NULL, name,
87 _e_mod_illume_config_select_window_list_changed,
92 e_widget_size_min_set(ow, 100, 200);
93 e_widget_ilist_go(ow);
94 if (sel >= 0) e_widget_ilist_selected_set(ow, sel);
95 e_widget_ilist_thaw(ow);
97 evas_event_thaw(evas);
98 e_widget_list_object_append(list, ow, 1, 0, 0.0);
103 _e_mod_illume_config_select_window_list_changed(void *data)
106 Ecore_X_Window_Type wtype;
107 char *title, *name, *class;
109 if (!(bd = data)) return;
110 title = ecore_x_icccm_title_get(bd->client.win);
111 ecore_x_icccm_name_class_get(bd->client.win, &name, &class);
112 ecore_x_netwm_window_type_get(bd->client.win, &wtype);
116 case E_ILLUME_SELECT_WINDOW_TYPE_HOME:
117 eina_stringshare_replace(&_e_illume_cfg->policy.home.title, title);
118 eina_stringshare_replace(&_e_illume_cfg->policy.home.class, class);
119 eina_stringshare_replace(&_e_illume_cfg->policy.home.name, name);
121 case E_ILLUME_SELECT_WINDOW_TYPE_VKBD:
122 eina_stringshare_replace(&_e_illume_cfg->policy.vkbd.title, title);
123 eina_stringshare_replace(&_e_illume_cfg->policy.vkbd.class, class);
124 eina_stringshare_replace(&_e_illume_cfg->policy.vkbd.name, name);
126 case E_ILLUME_SELECT_WINDOW_TYPE_SOFTKEY:
127 eina_stringshare_replace(&_e_illume_cfg->policy.softkey.title, title);
128 eina_stringshare_replace(&_e_illume_cfg->policy.softkey.class, class);
129 eina_stringshare_replace(&_e_illume_cfg->policy.softkey.name, name);
131 case E_ILLUME_SELECT_WINDOW_TYPE_INDICATOR:
132 eina_stringshare_replace(&_e_illume_cfg->policy.indicator.title, title);
133 eina_stringshare_replace(&_e_illume_cfg->policy.indicator.class, class);
134 eina_stringshare_replace(&_e_illume_cfg->policy.indicator.name, name);
138 if (title) free(title);
139 if (name) free(name);
140 if (class) free(class);
142 if (_sw_change_timer) ecore_timer_del(_sw_change_timer);
144 ecore_timer_add(0.5, _e_mod_illume_config_select_window_change_timeout, data);
148 _e_mod_illume_config_select_window_change_timeout(__UNUSED__ void *data)
150 e_config_save_queue();
151 _sw_change_timer = NULL;
152 return ECORE_CALLBACK_CANCEL;
156 _e_mod_illume_config_select_window_match(E_Border *bd)
158 Ecore_X_Window_Type wtype;
159 char *title, *name, *class;
163 title = ecore_x_icccm_title_get(bd->client.win);
164 ecore_x_icccm_name_class_get(bd->client.win, &name, &class);
165 ecore_x_netwm_window_type_get(bd->client.win, &wtype);
169 case E_ILLUME_SELECT_WINDOW_TYPE_HOME:
170 if (_e_illume_cfg->policy.home.match.title)
172 if ((title) && (!strcmp(title, _e_illume_cfg->policy.home.title)))
175 if (_e_illume_cfg->policy.home.match.name)
177 if ((name) && (!strcmp(name, _e_illume_cfg->policy.home.name)))
180 if (_e_illume_cfg->policy.home.match.class)
182 if ((class) && (!strcmp(class, _e_illume_cfg->policy.home.class)))
186 case E_ILLUME_SELECT_WINDOW_TYPE_VKBD:
187 if (_e_illume_cfg->policy.vkbd.match.title)
189 if ((title) && (!strcmp(title, _e_illume_cfg->policy.vkbd.title)))
192 if (_e_illume_cfg->policy.vkbd.match.name)
194 if ((name) && (!strcmp(name, _e_illume_cfg->policy.vkbd.name)))
197 if (_e_illume_cfg->policy.vkbd.match.class)
199 if ((class) && (!strcmp(class, _e_illume_cfg->policy.vkbd.class)))
203 case E_ILLUME_SELECT_WINDOW_TYPE_SOFTKEY:
204 if (_e_illume_cfg->policy.softkey.match.title)
206 if ((title) && (!strcmp(title, _e_illume_cfg->policy.softkey.title)))
209 if (_e_illume_cfg->policy.softkey.match.name)
211 if ((name) && (!strcmp(name, _e_illume_cfg->policy.softkey.name)))
214 if (_e_illume_cfg->policy.softkey.match.class)
216 if ((class) && (!strcmp(class, _e_illume_cfg->policy.softkey.class)))
220 case E_ILLUME_SELECT_WINDOW_TYPE_INDICATOR:
221 if (_e_illume_cfg->policy.indicator.match.title)
223 if ((title) && (!strcmp(title, _e_illume_cfg->policy.indicator.title)))
226 if (_e_illume_cfg->policy.indicator.match.name)
228 if ((name) && (!strcmp(name, _e_illume_cfg->policy.indicator.name)))
231 if (_e_illume_cfg->policy.indicator.match.class)
233 if ((class) && (!strcmp(class, _e_illume_cfg->policy.indicator.class)))
239 if (title) free(title);
240 if (name) free(name);
241 if (class) free(class);