summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/e_acpi.c18
-rw-r--r--src/bin/e_client.c47
-rw-r--r--src/bin/e_client.h4
-rw-r--r--src/bin/e_comp.c10
-rw-r--r--src/bin/e_comp_object.c10
-rw-r--r--src/bin/e_comp_x.c8
-rw-r--r--src/bin/e_hints.c20
-rw-r--r--src/bin/e_hints.h3
-rw-r--r--src/bin/e_pointer.c17
-rw-r--r--src/bin/e_startup.c2
10 files changed, 111 insertions, 28 deletions
diff --git a/src/bin/e_acpi.c b/src/bin/e_acpi.c
index f988909..39d2bba 100644
--- a/src/bin/e_acpi.c
+++ b/src/bin/e_acpi.c
@@ -125,6 +125,18 @@ static E_ACPI_Device_Multiplexed _devices_multiplexed[] =
125/* public variables */ 125/* public variables */
126E_API int E_EVENT_ACPI = 0; 126E_API int E_EVENT_ACPI = 0;
127 127
128static Eina_Bool
129_acpi_error_cb(void *data EINA_UNUSED)
130{
131 e_util_dialog_show
132 (_("ACPI Error"),
133 _("You seem to have an ACPI based system, but<br>"
134 "<hilight>acpid</hilight> does not seem to be running or<br>"
135 "contactable. Perhaps enable the <hilight>acpid</hilight><br>"
136 "service on your system?"));
137 return EINA_FALSE;
138}
139
128/* public functions */ 140/* public functions */
129EINTERN int 141EINTERN int
130e_acpi_init(void) 142e_acpi_init(void)
@@ -135,11 +147,7 @@ e_acpi_init(void)
135 if (!ecore_file_exists("/var/run/acpid.socket")) 147 if (!ecore_file_exists("/var/run/acpid.socket"))
136 { 148 {
137 if (ecore_file_exists("/proc/acpi")) 149 if (ecore_file_exists("/proc/acpi"))
138 e_util_dialog_show(_("Error"), 150 ecore_timer_add(5.0, _acpi_error_cb, NULL);
139 _("You seem to have an ACPI based system, but<br>"
140 "<hilight>acpid</hilight> does not seem to be running or<br>"
141 "contactable. Perhaps enable the <hilight>acpid</hilight><br>"
142 "service on your system?"));
143 return 1; 151 return 1;
144 } 152 }
145 153
diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index e6b2ff7..2b2bcf6 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -2195,6 +2195,29 @@ _e_client_eval(E_Client *ec)
2195 } 2195 }
2196 if (!ec->desktop) 2196 if (!ec->desktop)
2197 { 2197 {
2198 if (ec->steam.steam_game_id)
2199 {
2200 Efreet_Desktop *d;
2201 Eina_List *desks = efreet_util_desktop_name_glob_list("*");
2202 EINA_LIST_FREE(desks, d)
2203 {
2204 if (!d->exec) continue;
2205 if (!strncmp(d->exec, "steam ", 6))
2206 {
2207 const char *st = strstr(d->exec, "steam://rungameid/");
2208 if (st)
2209 {
2210 st += strlen("steam://rungameid/");
2211 unsigned int id = atoi(st);
2212 if (id == ec->steam.steam_game_id)
2213 ec->desktop = d;
2214 }
2215 }
2216 }
2217 }
2218 }
2219 if (!ec->desktop)
2220 {
2198 E_Exec_Instance *inst; 2221 E_Exec_Instance *inst;
2199 2222
2200 inst = e_exec_startup_id_pid_instance_find(ec->netwm.startup_id, 2223 inst = e_exec_startup_id_pid_instance_find(ec->netwm.startup_id,
@@ -2227,9 +2250,17 @@ _e_client_eval(E_Client *ec)
2227 } 2250 }
2228 if (!ec->desktop) 2251 if (!ec->desktop)
2229 { 2252 {
2253 // special case hacks for specific apps that just don't do things
2254 // right so we have to work around them
2255 if (ec->icccm.class && ec->icccm.name &&
2256 (!strcmp(ec->icccm.class, "Steam")) &&
2257 (!strcmp(ec->icccm.name, "Steam")))
2258 {
2259 ec->desktop = efreet_util_desktop_file_id_find("steam.desktop");
2260 }
2230 /* libreoffice and maybe others match window class 2261 /* libreoffice and maybe others match window class
2231 with .desktop file name */ 2262 with .desktop file name */
2232 if (ec->icccm.class) 2263 else if (ec->icccm.class)
2233 { 2264 {
2234 char buf[4096] = {0}; 2265 char buf[4096] = {0};
2235 snprintf(buf, sizeof(buf), "%s.desktop", ec->icccm.class); 2266 snprintf(buf, sizeof(buf), "%s.desktop", ec->icccm.class);
@@ -2840,8 +2871,11 @@ e_client_desk_set(E_Client *ec, E_Desk *desk)
2840 } 2871 }
2841 old_desk = ec->desk; 2872 old_desk = ec->desk;
2842 ec->desk = desk; 2873 ec->desk = desk;
2843 e_comp_object_effect_unclip(ec->frame); 2874 if (ec->frame)
2844 e_comp_object_effect_set(ec->frame, NULL); 2875 {
2876 e_comp_object_effect_unclip(ec->frame);
2877 e_comp_object_effect_set(ec->frame, NULL);
2878 }
2845 if (desk->visible || ec->sticky) 2879 if (desk->visible || ec->sticky)
2846 { 2880 {
2847 // force visibility if its a stack window going onto this desktop 2881 // force visibility if its a stack window going onto this desktop
@@ -5715,11 +5749,10 @@ e_client_transients_restack(E_Client *ec)
5715 if (!ec->transients) return; 5749 if (!ec->transients) return;
5716 5750
5717 list = eina_list_clone(ec->transients); 5751 list = eina_list_clone(ec->transients);
5718 E_LIST_REVERSE_FREE(list, child) 5752 EINA_LIST_FREE(list, child)
5719 { 5753 {
5720 /* Don't stack iconic transients. If the user wants these shown, 5754 // Don't stack iconic transients. If the user wants these shown,
5721 * that's another option. 5755 // that's another option.
5722 */
5723 if (child->iconic) continue; 5756 if (child->iconic) continue;
5724 if (below) 5757 if (below)
5725 { 5758 {
diff --git a/src/bin/e_client.h b/src/bin/e_client.h
index ceae239..adb98fc 100644
--- a/src/bin/e_client.h
+++ b/src/bin/e_client.h
@@ -568,6 +568,10 @@ struct E_Client
568 unsigned char have_property E_BITFIELD; 568 unsigned char have_property E_BITFIELD;
569 unsigned char vkbd E_BITFIELD; 569 unsigned char vkbd E_BITFIELD;
570 } vkbd; 570 } vkbd;
571
572 struct {
573 unsigned int steam_game_id;
574 } steam;
571 575
572 struct 576 struct
573 { 577 {
diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c
index 6727d40..316c189 100644
--- a/src/bin/e_comp.c
+++ b/src/bin/e_comp.c
@@ -713,6 +713,7 @@ _e_comp_shapes_update_job(void *d EINA_UNUSED)
713 Eina_Rectangle *r; 713 Eina_Rectangle *r;
714 Eina_List *rl = NULL; 714 Eina_List *rl = NULL;
715 E_Color color = {0}; 715 E_Color color = {0};
716 const char *type;
716 717
717 SHAPE_INF("---------------------"); 718 SHAPE_INF("---------------------");
718 719
@@ -738,11 +739,14 @@ _e_comp_shapes_update_job(void *d EINA_UNUSED)
738 _e_comp_shapes_update_object_shape_comp_helper(o, tb); 739 _e_comp_shapes_update_object_shape_comp_helper(o, tb);
739 continue; 740 continue;
740 } 741 }
741 ec = e_comp_object_client_get(o); 742 ec = NULL;
743 type = evas_object_type_get(o);
744 if ((type) && (!strcmp(type, "e_comp_object")))
745 ec = e_comp_object_client_get(o);
742 if (ec && (!ec->no_shape_cut)) 746 if (ec && (!ec->no_shape_cut))
743 _e_comp_shapes_update_comp_client_shape_comp_helper(ec, tb 747 _e_comp_shapes_update_comp_client_shape_comp_helper(ec, tb
744 ,&rl 748 ,&rl
745 ); 749 );
746 750
747 else 751 else
748 _e_comp_shapes_update_object_shape_comp_helper(o, tb); 752 _e_comp_shapes_update_object_shape_comp_helper(o, tb);
diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index d52ea2b..14d3a64 100644
--- a/src/bin/e_comp_object.c
+++ b/src/bin/e_comp_object.c
@@ -663,7 +663,7 @@ _e_comp_object_shadow_setup(E_Comp_Object *cw)
663 { 663 {
664 if (cw->zoomap_disabled) 664 if (cw->zoomap_disabled)
665 { 665 {
666 if (cw->frame_object && (e_zoomap_child_get(cw->zoomobj) == cw->frame_object)) return EINA_FALSE; 666 if (cw->frame_object && (cw->zoomobj && e_zoomap_child_get(cw->zoomobj) == cw->frame_object)) return EINA_FALSE;
667 } 667 }
668 else 668 else
669 { 669 {
@@ -2989,7 +2989,6 @@ e_comp_object_util_del_list_append(Evas_Object *obj, Evas_Object *to_del)
2989{ 2989{
2990 Eina_List *l; 2990 Eina_List *l;
2991 2991
2992 SOFT_ENTRY();
2993 EINA_SAFETY_ON_NULL_RETURN(to_del); 2992 EINA_SAFETY_ON_NULL_RETURN(to_del);
2994 l = evas_object_data_get(obj, "comp_object-to_del"); 2993 l = evas_object_data_get(obj, "comp_object-to_del");
2995 evas_object_data_set(obj, "comp_object-to_del", eina_list_append(l, to_del)); 2994 evas_object_data_set(obj, "comp_object-to_del", eina_list_append(l, to_del));
@@ -3178,12 +3177,15 @@ E_API void
3178e_comp_object_util_center_on(Evas_Object *obj, Evas_Object *on) 3177e_comp_object_util_center_on(Evas_Object *obj, Evas_Object *on)
3179{ 3178{
3180 int x, y, w, h, ow, oh; 3179 int x, y, w, h, ow, oh;
3181 E_Comp_Object *cw2; 3180 E_Comp_Object *cw2 = NULL;
3181 const char *type;
3182 3182
3183 SOFT_ENTRY(); 3183 SOFT_ENTRY();
3184 EINA_SAFETY_ON_NULL_RETURN(on); 3184 EINA_SAFETY_ON_NULL_RETURN(on);
3185 3185
3186 cw2 = evas_object_smart_data_get(on); 3186 type = evas_object_type_get(on);
3187 if ((type) && (!strcmp(type, "e_comp_object")))
3188 cw2 = evas_object_smart_data_get(on);
3187 if (cw2 && eina_streq(evas_object_type_get(on), SMART_NAME)) 3189 if (cw2 && eina_streq(evas_object_type_get(on), SMART_NAME))
3188 x = cw2->ec->x, y = cw2->ec->y, w = cw2->ec->w, h = cw2->ec->h; 3190 x = cw2->ec->x, y = cw2->ec->y, w = cw2->ec->w, h = cw2->ec->h;
3189 else 3191 else
diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c
index 0835ee9..21d139a 100644
--- a/src/bin/e_comp_x.c
+++ b/src/bin/e_comp_x.c
@@ -560,6 +560,8 @@ _e_comp_x_client_new_helper(E_Client *ec)
560 ec->e.fetch.stack = 1; 560 ec->e.fetch.stack = 1;
561 else if (atoms[i] == ATM_GTK_FRAME_EXTENTS) 561 else if (atoms[i] == ATM_GTK_FRAME_EXTENTS)
562 ec->comp_data->fetch_gtk_frame_extents = 1; 562 ec->comp_data->fetch_gtk_frame_extents = 1;
563 else if (atoms[i] == ATM_STEAM_GAME)
564 e_hints_window_steam_game_get(ec);
563 else if (ec->re_manage) 565 else if (ec->re_manage)
564 { 566 {
565 if (atoms[i] == E_ATOM_DESKTOP_FILE) 567 if (atoms[i] == E_ATOM_DESKTOP_FILE)
@@ -2200,6 +2202,12 @@ _e_comp_x_property(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_W
2200 _e_comp_x_client_data_get(ec)->fetch_gtk_frame_extents = 1; 2202 _e_comp_x_client_data_get(ec)->fetch_gtk_frame_extents = 1;
2201 EC_CHANGED(ec); 2203 EC_CHANGED(ec);
2202 } 2204 }
2205 else if (ev->atom == ATM_STEAM_GAME)
2206 {
2207 e_hints_window_steam_game_get(ec);
2208 ec->changes.icon = 1;
2209 EC_CHANGED(ec);
2210 }
2203 2211
2204 return ECORE_CALLBACK_RENEW; 2212 return ECORE_CALLBACK_RENEW;
2205} 2213}
diff --git a/src/bin/e_hints.c b/src/bin/e_hints.c
index f1b8f61..eabf467 100644
--- a/src/bin/e_hints.c
+++ b/src/bin/e_hints.c
@@ -15,6 +15,8 @@ E_API Ecore_X_Atom ATM_ENLIGHTENMENT_SCALE = 0;
15E_API Ecore_X_Atom ATM_NETWM_SHOW_WINDOW_MENU = 0; 15E_API Ecore_X_Atom ATM_NETWM_SHOW_WINDOW_MENU = 0;
16E_API Ecore_X_Atom ATM_NETWM_PERFORM_BUTTON_ACTION = 0; 16E_API Ecore_X_Atom ATM_NETWM_PERFORM_BUTTON_ACTION = 0;
17E_API Ecore_X_Atom ATM_GTK_FRAME_EXTENTS = 0; 17E_API Ecore_X_Atom ATM_GTK_FRAME_EXTENTS = 0;
18
19E_API Ecore_X_Atom ATM_STEAM_GAME = 0;
18#endif 20#endif
19 21
20EINTERN void 22EINTERN void
@@ -34,6 +36,7 @@ e_hints_init(Ecore_Window root, Ecore_Window propwin)
34 "_NET_WM_SHOW_WINDOW_MENU", 36 "_NET_WM_SHOW_WINDOW_MENU",
35 "_NET_WM_PERFORM_BUTTON_ACTION", 37 "_NET_WM_PERFORM_BUTTON_ACTION",
36 "_GTK_FRAME_EXTENTS", 38 "_GTK_FRAME_EXTENTS",
39 "STEAM_GAME",
37 }; 40 };
38 Ecore_X_Atom atoms[EINA_C_ARRAY_LENGTH(atom_names)]; 41 Ecore_X_Atom atoms[EINA_C_ARRAY_LENGTH(atom_names)];
39 Ecore_X_Atom supported[46]; 42 Ecore_X_Atom supported[46];
@@ -53,6 +56,7 @@ e_hints_init(Ecore_Window root, Ecore_Window propwin)
53 ATM_NETWM_SHOW_WINDOW_MENU = atoms[6]; 56 ATM_NETWM_SHOW_WINDOW_MENU = atoms[6];
54 ATM_NETWM_PERFORM_BUTTON_ACTION = atoms[7]; 57 ATM_NETWM_PERFORM_BUTTON_ACTION = atoms[7];
55 ATM_GTK_FRAME_EXTENTS = atoms[8]; 58 ATM_GTK_FRAME_EXTENTS = atoms[8];
59 ATM_STEAM_GAME = atoms[9];
56 60
57 supported_num = 0; 61 supported_num = 0;
58 /* Set what hints we support */ 62 /* Set what hints we support */
@@ -1606,6 +1610,22 @@ e_hints_window_qtopia_soft_menus_get(E_Client *ec)
1606} 1610}
1607 1611
1608E_API void 1612E_API void
1613e_hints_window_steam_game_get(E_Client *ec)
1614{
1615#ifdef HAVE_WAYLAND_ONLY
1616 (void)ec;
1617#else
1618 unsigned int val;
1619
1620 if (!e_client_has_xwindow(ec)) return;
1621 if (ecore_x_window_prop_card32_get(e_client_util_win_get(ec), ATM_STEAM_GAME, &val, 1))
1622 ec->steam.steam_game_id = val;
1623 else
1624 ec->steam.steam_game_id = 0;
1625#endif
1626}
1627
1628E_API void
1609e_hints_window_virtual_keyboard_state_get(E_Client *ec) 1629e_hints_window_virtual_keyboard_state_get(E_Client *ec)
1610{ 1630{
1611#ifdef HAVE_WAYLAND_ONLY 1631#ifdef HAVE_WAYLAND_ONLY
diff --git a/src/bin/e_hints.h b/src/bin/e_hints.h
index 5fa1f3f..38854ae 100644
--- a/src/bin/e_hints.h
+++ b/src/bin/e_hints.h
@@ -40,6 +40,8 @@ E_API void e_hints_window_e_state_get(E_Client *ec);
40E_API void e_hints_window_qtopia_soft_menu_get(E_Client *ec); 40E_API void e_hints_window_qtopia_soft_menu_get(E_Client *ec);
41E_API void e_hints_window_qtopia_soft_menus_get(E_Client *ec); 41E_API void e_hints_window_qtopia_soft_menus_get(E_Client *ec);
42 42
43E_API void e_hints_window_steam_game_get(E_Client *ec);
44
43E_API void e_hints_window_virtual_keyboard_state_get(E_Client *ec); 45E_API void e_hints_window_virtual_keyboard_state_get(E_Client *ec);
44E_API void e_hints_window_virtual_keyboard_get(E_Client *ec); 46E_API void e_hints_window_virtual_keyboard_get(E_Client *ec);
45 47
@@ -58,6 +60,7 @@ extern E_API Ecore_X_Atom ATM_ENLIGHTENMENT_SCALE;
58extern E_API Ecore_X_Atom ATM_NETWM_SHOW_WINDOW_MENU; 60extern E_API Ecore_X_Atom ATM_NETWM_SHOW_WINDOW_MENU;
59extern E_API Ecore_X_Atom ATM_NETWM_PERFORM_BUTTON_ACTION; 61extern E_API Ecore_X_Atom ATM_NETWM_PERFORM_BUTTON_ACTION;
60extern E_API Ecore_X_Atom ATM_GTK_FRAME_EXTENTS; 62extern E_API Ecore_X_Atom ATM_GTK_FRAME_EXTENTS;
63extern E_API Ecore_X_Atom ATM_STEAM_GAME;
61#endif 64#endif
62 65
63#ifdef HAVE_WAYLAND 66#ifdef HAVE_WAYLAND
diff --git a/src/bin/e_pointer.c b/src/bin/e_pointer.c
index 3b5a218..c27a44d 100644
--- a/src/bin/e_pointer.c
+++ b/src/bin/e_pointer.c
@@ -217,7 +217,7 @@ _e_pointer_cb_mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev
217 return ECORE_CALLBACK_PASS_ON; 217 return ECORE_CALLBACK_PASS_ON;
218} 218}
219 219
220static void 220static void
221_e_pointer_cb_hot_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) 221_e_pointer_cb_hot_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
222{ 222{
223 E_Pointer *ptr = data; 223 E_Pointer *ptr = data;
@@ -225,20 +225,20 @@ _e_pointer_cb_hot_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA
225 225
226 if (!ptr->e_cursor) return; 226 if (!ptr->e_cursor) return;
227 if (!evas_object_visible_get(ptr->o_ptr)) return; 227 if (!evas_object_visible_get(ptr->o_ptr)) return;
228 edje_object_part_geometry_get(ptr->o_ptr, "e.swallow.hotspot", 228 evas_object_geometry_get(ptr->buffer_o_hot,
229 &x, &y, NULL, NULL); 229 &x, &y, NULL, NULL);
230 _e_pointer_hot_update(ptr, x, y); 230 _e_pointer_hot_update(ptr, x, y);
231} 231}
232 232
233static void 233static void
234_e_pointer_cb_hot_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) 234_e_pointer_cb_hot_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
235{ 235{
236 E_Pointer *ptr = data; 236 E_Pointer *ptr = data;
237 int x = 0, y = 0; 237 int x = 0, y = 0;
238 238
239 if (!ptr->e_cursor) return; 239 if (!ptr->e_cursor) return;
240 edje_object_part_geometry_get(ptr->o_ptr, "e.swallow.hotspot", 240 evas_object_geometry_get(ptr->buffer_o_hot,
241 &x, &y, NULL, NULL); 241 &x, &y, NULL, NULL);
242 _e_pointer_hot_update(ptr, x, y); 242 _e_pointer_hot_update(ptr, x, y);
243} 243}
244 244
@@ -465,6 +465,7 @@ _e_pointer_type_set(E_Pointer *ptr, const char *type)
465 /* try to set the edje object theme */ 465 /* try to set the edje object theme */
466 if (!e_theme_edje_object_set(ptr->o_ptr, "base/theme/pointer", cursor)) 466 if (!e_theme_edje_object_set(ptr->o_ptr, "base/theme/pointer", cursor))
467 cursor[0] = 0; 467 cursor[0] = 0;
468 edje_object_part_swallow(ptr->o_ptr, "e.swallow.hotspot", ptr->o_hot);
468 if (!init) 469 if (!init)
469 { 470 {
470 edje_object_signal_emit(ptr->o_ptr, "e,state,init", "e"); 471 edje_object_signal_emit(ptr->o_ptr, "e,state,init", "e");
@@ -474,8 +475,8 @@ _e_pointer_type_set(E_Pointer *ptr, const char *type)
474 _e_pointer_x11_setup(ptr, cursor); 475 _e_pointer_x11_setup(ptr, cursor);
475 if (!cursor[0]) return; 476 if (!cursor[0]) return;
476 477
477 edje_object_part_geometry_get(ptr->o_ptr, "e.swallow.hotspot", 478 evas_object_geometry_get(ptr->buffer_o_hot,
478 &x, &y, NULL, NULL); 479 &x, &y, NULL, NULL);
479 _e_pointer_hot_update(ptr, x, y); 480 _e_pointer_hot_update(ptr, x, y);
480 481
481 if (ptr->canvas) 482 if (ptr->canvas)
diff --git a/src/bin/e_startup.c b/src/bin/e_startup.c
index ccb37ee..2fd88ed 100644
--- a/src/bin/e_startup.c
+++ b/src/bin/e_startup.c
@@ -44,7 +44,7 @@ e_startup_mode_set(E_Startup_Mode mode)
44 _e_startup_event_cb, 44 _e_startup_event_cb,
45 strdup(buf)); 45 strdup(buf));
46 if (timer) ecore_timer_del(timer); 46 if (timer) ecore_timer_del(timer);
47 timer = ecore_timer_add(5.0, _e_startup_time_exceeded, NULL); 47 timer = ecore_timer_add(10.0, _e_startup_time_exceeded, NULL);
48 e_init_undone(); 48 e_init_undone();
49} 49}
50 50