2 #include "e_mod_move_shared_types.h"
3 #include "e_mod_move_debug.h"
4 #include "e_mod_move_atoms.h"
6 /* local subsystem globals */
7 static E_Move *_m = NULL;
9 /* externally accessible functions */
11 e_mod_move_util_set(E_Move *m,
12 E_Manager *man __UNUSED__)
18 e_mod_move_util_get(void)
24 e_mod_move_util_border_visible_get(E_Move_Border *mb)
29 EINTERN Ecore_X_Window
30 e_mod_move_util_client_xid_get(E_Move_Border *mb)
32 E_CHECK_RETURN(mb, 0);
33 if (mb->bd) return mb->bd->client.win;
37 #define _WND_REQUEST_ANGLE_IDX 0
38 #define _WND_CURR_ANGLE_IDX 1
41 e_mod_move_util_win_prop_angle_get(Ecore_X_Window win,
45 Eina_Bool res = EINA_FALSE;
47 int angle[2] = {-1, -1};
48 unsigned char* prop_data = NULL;
50 ret = ecore_x_window_prop_property_get(win,
51 ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
52 ECORE_X_ATOM_CARDINAL,
58 if (prop_data) free(prop_data);
63 memcpy (&angle, prop_data, sizeof (int)*count);
64 if (count == 2) res = EINA_TRUE;
67 if (prop_data) free(prop_data);
69 *req = angle[_WND_REQUEST_ANGLE_IDX];
70 *curr = angle[_WND_CURR_ANGLE_IDX];
72 if (angle[0] == -1 && angle[1] == -1) res = EINA_FALSE;
78 e_mod_move_util_border_hidden_set(E_Move_Border *mb,
83 E_Manager_Comp_Source *comp_src = NULL;
84 Eina_Bool comp_hidden;
91 bd = e_border_find_all_by_client_window(mb->client_win);
92 E_CHECK_GOTO(bd, error_cleanup);
93 comp_src = e_manager_comp_src_get(m->man, bd->win);
94 E_CHECK_GOTO(comp_src, error_cleanup);
95 comp_hidden = e_manager_comp_src_hidden_get(m->man, comp_src);
97 if (comp_hidden == hidden)
100 e_manager_comp_src_hidden_set(m->man, comp_src, hidden);
108 e_mod_move_util_rotation_lock(E_Move *m)
110 unsigned int val = 1;
111 E_Manager *man = NULL;
119 zone = e_util_zone_current_get(man);
122 e_zone_rotation_block_set(zone, "move-tizen", EINA_TRUE);
123 ecore_x_window_prop_card32_set(m->man->root, ATOM_ROTATION_LOCK, &val, 1);
127 e_mod_move_util_rotation_unlock(E_Move *m)
129 unsigned int val = 0;
130 E_Manager *man = NULL;
138 zone = e_util_zone_current_get(man);
141 e_zone_rotation_block_set(zone, "move-tizen", EINA_FALSE);
142 ecore_x_window_prop_card32_set(m->man->root, ATOM_ROTATION_LOCK, &val, 1);
146 e_mod_move_util_compositor_object_visible_get(E_Move_Border *mb)
148 // get Evas_Object from Compositor
151 Evas_Object *comp_obj = NULL;
152 E_Manager_Comp_Source *comp_src = NULL;
153 Eina_Bool ret = EINA_FALSE;
155 E_CHECK_RETURN(mb, EINA_FALSE);
157 E_CHECK_RETURN(m, EINA_FALSE);
161 bd = e_border_find_all_by_client_window(mb->client_win);
162 E_CHECK_RETURN(bd, EINA_FALSE);
164 comp_src = e_manager_comp_src_get(m->man, bd->win);
165 E_CHECK_RETURN(comp_src, EINA_FALSE);
167 comp_obj = e_manager_comp_src_shadow_get(m->man, comp_src);
168 E_CHECK_RETURN(comp_obj, EINA_FALSE);
169 ret = evas_object_visible_get(comp_obj);
175 EINTERN E_Move_Border *
176 e_mod_move_util_visible_fullscreen_window_find(void)
179 E_Move_Border *mb = NULL;
180 E_Move_Border *ret_mb = NULL;
183 m = e_mod_move_util_get();
184 E_CHECK_RETURN(m, 0);
186 EINA_INLIST_REVERSE_FOREACH(m->borders, mb)
189 if ( (zone->x == mb->x)
190 && (zone->y == mb->y)
191 && (zone->w == mb->w)
192 && (zone->h == mb->h))
194 if (mb->visibility == E_MOVE_VISIBILITY_STATE_VISIBLE)
203 e_mod_move_util_compositor_composite_mode_set(E_Move *m,
207 E_Manager *man = NULL;
213 zone = e_util_zone_current_get(man);
215 e_manager_comp_composite_mode_set(man, zone, set);
219 e_mod_move_util_fb_move(int angle,
225 Ecore_X_Display *d = ecore_x_display_get();
226 int fb_x = 0, fb_y = 0;
231 case 0: fb_x = 0; fb_y = y + ch; break;
232 case 90: fb_x = x + cw; fb_y = 0; break;
233 case 180: fb_x = 0; fb_y = y - ch; break;
234 case 270: fb_x = x - cw; fb_y = 0; break;
239 utilx_set_video_offset(d, fb_x, fb_y);
243 e_mod_move_util_layer_policy_get(E_Move_Layer_Policy layer)
248 case E_MOVE_QUICKPANEL_LAYER:
249 case E_MOVE_NOTIFICATION_LAYER:
250 case E_MOVE_INDICATOR_LAYER:
252 case E_MOVE_FULLSCREEN_LAYER:
254 case E_MOVE_STATE_ABOVE_LAYER:
255 case E_MOVE_ACTIVATE_LAYER:
256 case E_MOVE_DIALOG_LAYER:
257 case E_MOVE_SPLASH_LAYER:
258 case E_MOVE_SOFTKEY_LAYER:
260 case E_MOVE_CLIPBOARD_LAYER:
261 case E_MOVE_KEYBOARD_LAYER:
262 case E_MOVE_CONFORMANT_LAYER:
263 case E_MOVE_APP_LAYER:
264 case E_MOVE_HOME_LAYER:
266 case E_MOVE_STATE_BELOW_LAYER:
274 EINTERN E_Move_Scroll_Region_Indicator
275 e_mod_move_indicator_region_scroll_check(int angle,
280 int region_always = 0;
281 int region_quickpanel = 0;
282 int region_apptray = 0;
283 E_Move_Border *indi_mb = NULL;
284 E_Move_Scroll_Region_Indicator ret = E_MOVE_SCROLL_REGION_NONE;
286 m = e_mod_move_util_get();
287 E_CHECK_RETURN(m, E_MOVE_SCROLL_REGION_NONE);
289 if (!m->elm_indicator_mode) // Indicator Window mode
291 indi_mb = e_mod_move_indicator_find();
292 E_CHECK_RETURN(indi_mb, E_MOVE_SCROLL_REGION_NONE);
300 if (m->elm_indicator_mode)
301 w = m->indicator_widget_geometry[E_MOVE_ANGLE_0].w;
303 region_always = (m->indicator_always_region_ratio.portrait * w);
304 region_quickpanel = (m->indicator_quickpanel_region_ratio.portrait * w);
305 region_apptray = (m->indicator_apptray_region_ratio.portrait * w);
307 if (input.x < region_always) ret = E_MOVE_SCROLL_REGION_NONE; // Always scroll region
308 else if ( input.x < region_quickpanel ) ret = E_MOVE_SCROLL_REGION_QUICKPANEL;
309 else ret = E_MOVE_SCROLL_REGION_NONE; // Apptray scroll region
312 if (m->elm_indicator_mode)
313 h = m->indicator_widget_geometry[E_MOVE_ANGLE_90].h;
315 region_always = (h - (m->indicator_always_region_ratio.landscape * h));
316 region_quickpanel = (h - (m->indicator_quickpanel_region_ratio.landscape * h));
317 region_apptray = (h - (m->indicator_apptray_region_ratio.landscape * h));
319 if (input.y > region_always) ret = E_MOVE_SCROLL_REGION_NONE; // Always scroll region
320 else if ( input.y > region_quickpanel ) ret = E_MOVE_SCROLL_REGION_QUICKPANEL;
321 else ret = E_MOVE_SCROLL_REGION_NONE; // Apptray scroll region
324 if (m->elm_indicator_mode)
325 w = m->indicator_widget_geometry[E_MOVE_ANGLE_180].w;
327 region_always = (w - (m->indicator_always_region_ratio.portrait * w));
328 region_quickpanel = (w - (m->indicator_quickpanel_region_ratio.portrait * w));
329 region_apptray = (w - (m->indicator_apptray_region_ratio.portrait * w));
331 if (input.x > region_always) ret = E_MOVE_SCROLL_REGION_NONE; // Always scroll region
332 else if ( input.x > region_quickpanel ) ret = E_MOVE_SCROLL_REGION_QUICKPANEL;
333 else ret = E_MOVE_SCROLL_REGION_NONE; // Apptray scroll region
336 if (m->elm_indicator_mode)
337 h = m->indicator_widget_geometry[E_MOVE_ANGLE_270].h;
339 region_always = (m->indicator_always_region_ratio.landscape * h);
340 region_quickpanel = (m->indicator_quickpanel_region_ratio.landscape * h);
341 region_apptray = (m->indicator_apptray_region_ratio.landscape * h);
343 if (input.y < region_always) ret = E_MOVE_SCROLL_REGION_NONE; // Always scroll region
344 else if ( input.y < region_quickpanel ) ret = E_MOVE_SCROLL_REGION_QUICKPANEL;
345 else ret = E_MOVE_SCROLL_REGION_NONE; // Apptray scroll region
354 e_mod_move_panel_scrollable_state_init(E_Move_Panel_Scrollable_State *panel_scrollable_state)
356 E_CHECK_RETURN(panel_scrollable_state, EINA_FALSE);
358 panel_scrollable_state->always = EINA_TRUE;
359 panel_scrollable_state->quickpanel = EINA_TRUE;
360 panel_scrollable_state->apptray = EINA_TRUE;
366 e_mod_move_panel_scrollable_state_get(Ecore_X_Window win,
367 E_Move_Panel_Scrollable_State *panel_scrollable_state)
369 unsigned int *vals = NULL;
370 Eina_Bool res = EINA_FALSE;
373 E_CHECK_RETURN(panel_scrollable_state, EINA_FALSE);
374 E_CHECK_RETURN(win, EINA_FALSE);
376 num = ecore_x_window_prop_card32_list_get
377 (win, ATOM_MV_PANEL_SCROLLABLE_STATE, &vals);
378 E_CHECK_GOTO((num == 3), cleanup); // currently, we uses only 3 panel type
379 E_CHECK_GOTO(vals, cleanup);
381 panel_scrollable_state->always = (vals[0] ? EINA_TRUE : EINA_FALSE);
382 panel_scrollable_state->quickpanel = (vals[1] ? EINA_TRUE : EINA_FALSE);
383 panel_scrollable_state->apptray = (vals[2] ? EINA_TRUE : EINA_FALSE);
388 if (vals) E_FREE(vals);
393 e_mod_move_panel_scrollable_get(E_Move_Border *mb, E_Move_Panel_Type type)
395 Eina_Bool res = EINA_FALSE;
397 E_CHECK_RETURN(mb, EINA_FALSE);
401 case E_MOVE_PANEL_TYPE_ALWAYS:
402 res = mb->panel_scrollable_state.always;
404 case E_MOVE_PANEL_TYPE_QUICKPANEL:
405 res = mb->panel_scrollable_state.quickpanel;
407 case E_MOVE_PANEL_TYPE_APPTRAY:
408 res = mb->panel_scrollable_state.apptray;
410 case E_MOVE_PANEL_TYPE_NONE:
419 e_mod_move_util_border_find_by_pointer(int x,
422 E_Border_List *bl = NULL;
423 E_Border *temp_bd = NULL;
424 E_Border *find_bd = NULL;
425 E_Border *focused_bd = NULL;
427 focused_bd = e_border_focused_get();
428 E_CHECK_RETURN(focused_bd, NULL);
430 bl = e_container_border_list_last(focused_bd->zone->container);
432 while ((temp_bd = e_container_border_list_prev(bl)))
434 if (!temp_bd) continue;
436 if (!E_INSIDE(x, y, temp_bd->x, temp_bd->y, temp_bd->w, temp_bd->h))
444 e_container_border_list_free(bl);
450 e_mod_move_util_root_angle_get(void)
453 unsigned char *data = NULL;
458 m = e_mod_move_util_get();
459 E_CHECK_RETURN(m, 0);
461 ret = ecore_x_window_prop_property_get(m->man->root,
462 ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE,
463 ECORE_X_ATOM_CARDINAL,
467 if (ret && data) memcpy (&angle, data, sizeof(int));
468 if (data) free (data);
469 if (angle) angle %= 360;