Index: src/lib/elm_win.c
===================================================================
--- src/lib/elm_win.c	(revision 75459)
+++ src/lib/elm_win.c	(working copy)
@@ -64,6 +64,7 @@ struct _Elm_Win_Smart_Data
    {
       Ecore_X_Window       xwin;
       Ecore_Event_Handler *client_message_handler;
+      Ecore_Event_Handler *property_handler;
    } x;
 #endif
 #ifdef HAVE_ELEMENTARY_WAYLAND
@@ -1191,6 +1192,8 @@ _elm_win_smart_del(Evas_Object *obj)
 #ifdef HAVE_ELEMENTARY_X
    if (sd->x.client_message_handler)
      ecore_event_handler_del(sd->x.client_message_handler);
+   if (sd->x.property_handler)
+     ecore_event_handler_del(sd->x.property_handler);
 #endif
 
    if (sd->img_obj)
@@ -1411,6 +1414,7 @@ static void
 _elm_win_xwin_update(Elm_Win_Smart_Data *sd)
 {
    const char *s;
+   Elm_Win_Indicator_Mode mode;
 
    _elm_win_xwindow_get(sd);
    if (sd->parent)
@@ -1545,12 +1549,17 @@ _elm_win_xwin_update(Elm_Win_Smart_Data *sd)
      }
    ecore_x_e_virtual_keyboard_state_set
      (sd->x.xwin, (Ecore_X_Virtual_Keyboard_State)sd->kbdmode);
-   if (sd->indmode == ELM_WIN_INDICATOR_SHOW)
-     ecore_x_e_illume_indicator_state_set
-       (sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
-   else if (sd->indmode == ELM_WIN_INDICATOR_HIDE)
-     ecore_x_e_illume_indicator_state_set
-       (sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
+
+   mode = ecore_x_e_illume_indicator_state_get(sd->x.xwin);
+   if (mode != sd->indmode)
+     {
+        if (mode == ELM_WIN_INDICATOR_SHOW)
+          ecore_x_e_illume_indicator_state_set
+            (sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_ON);
+        else if (mode == ELM_WIN_INDICATOR_HIDE)
+          ecore_x_e_illume_indicator_state_set
+            (sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
+     }
 }
 
 #endif
@@ -1748,6 +1757,23 @@ _elm_win_client_message(void *data,
    return ECORE_CALLBACK_PASS_ON;
 }
 
+static Eina_Bool
+_elm_win_property_change(void *data,
+                         int type __UNUSED__,
+                         void *event)
+{
+   Elm_Win_Smart_Data *sd = data;
+   Ecore_X_Event_Window_Property *e = event;
+
+   if (e->atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE)
+     {
+        if (e->win == sd->x.xwin)
+          {
+             sd->indmode = ecore_x_e_illume_indicator_state_get(e->win);
+          }
+     }
+   return ECORE_CALLBACK_PASS_ON;
+}
 #endif
 
 static void
@@ -2454,17 +2480,33 @@ elm_win_add(Evas_Object *parent,
 
 #ifdef HAVE_ELEMENTARY_X
    else if (ENGINE_COMPARE(ELM_SOFTWARE_X11))
-     sd->x.client_message_handler = ecore_event_handler_add
-         (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+     {
+        sd->x.client_message_handler = ecore_event_handler_add
+            (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+        sd->x.property_handler = ecore_event_handler_add
+            (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_win_property_change, sd);
+     }
    else if (ENGINE_COMPARE(ELM_SOFTWARE_16_X11))
-     sd->x.client_message_handler = ecore_event_handler_add
-         (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+     {
+        sd->x.client_message_handler = ecore_event_handler_add
+            (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+        sd->x.property_handler = ecore_event_handler_add
+            (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_win_property_change, sd);
+     }
    else if (ENGINE_COMPARE(ELM_SOFTWARE_8_X11))
-     sd->x.client_message_handler = ecore_event_handler_add
-         (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+     {
+        sd->x.client_message_handler = ecore_event_handler_add
+            (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+        sd->x.property_handler = ecore_event_handler_add
+            (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_win_property_change, sd);
+     }
    else if (ENGINE_COMPARE(ELM_OPENGL_X11))
-     sd->x.client_message_handler = ecore_event_handler_add
-         (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+     {
+        sd->x.client_message_handler = ecore_event_handler_add
+            (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, sd);
+        sd->x.property_handler = ecore_event_handler_add
+            (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_win_property_change, sd);
+     }
 #endif
 
    else if (!strncmp(ENGINE_GET(), "shot:", 5))
