diff --git a/src/bin/e_hints.c b/src/bin/e_hints.c index aac659643..1df66de19 100644 --- a/src/bin/e_hints.c +++ b/src/bin/e_hints.c @@ -426,3 +426,41 @@ e_hints_window_icon_name_get(Ecore_X_Window win) bd->client.icccm.icon_name = name; bd->changed = 1; } + +/* this SHIT is for e17 to PRETEND it is CDE so java doesnt go all fucked and + * do the wrong thing. java is NOT porperly writtey to comply with x + * standards such as icccm. etc. you need to just check it's x code to find + * out. this caused us a LOT of pain to find out - thanks HandyAnde + * + * BTW - this PARTYL fixes batik - it does not fix cgoban or batik fully. + * batik still requests its window to be twice the width and height it should be + * and thinks its half the width and height it is. cgoban wont render its first + * window because it THINKS it smaller than it is. + */ +void +e_hints_root_cde_pretend(Ecore_X_Window root) +{ + static Ecore_X_Atom _XA_DT_SM_WINDOW_INFO = 0; + static Ecore_X_Atom _XA_DT_SM_STATE_INFO = 0; + Ecore_X_Window data[2], info_win; + + if (_XA_DT_SM_WINDOW_INFO == 0) + _XA_DT_SM_WINDOW_INFO = ecore_x_atom_get("_DT_SM_WINDOW_INFO"); + if (_XA_DT_SM_STATE_INFO == 0) + _XA_DT_SM_STATE_INFO = ecore_x_atom_get("_DT_SM_STATE_INFO"); + + data[0] = 0; + data[1] = 0; + info_win = ecore_x_window_override_new(root, -99, -99, 1, 1); + ecore_x_window_prop_property_set(info_win, + _XA_DT_SM_STATE_INFO, + _XA_DT_SM_STATE_INFO, + 32, data, 1); + + data[0] = 0; + data[1] = info_win; + ecore_x_window_prop_property_set(root, + _XA_DT_SM_WINDOW_INFO, + _XA_DT_SM_WINDOW_INFO, + 32, data, 2); +} diff --git a/src/bin/e_hints.h b/src/bin/e_hints.h index 2a3b872f1..f508b67e2 100644 --- a/src/bin/e_hints.h +++ b/src/bin/e_hints.h @@ -31,5 +31,7 @@ EAPI void e_hints_window_sticky_set(Ecore_X_Window win, int on); EAPI int e_hints_window_sticky_isset(Ecore_X_Window win); EAPI void e_hints_window_icon_name_get(Ecore_X_Window win); +EAPI void e_hints_root_cde_pretend(Ecore_X_Window root); + #endif #endif diff --git a/src/bin/e_manager.c b/src/bin/e_manager.c index 0c0e857b2..ad65434a2 100644 --- a/src/bin/e_manager.c +++ b/src/bin/e_manager.c @@ -89,6 +89,7 @@ e_manager_new(Ecore_X_Window root) if (h) man->handlers = evas_list_append(man->handlers, h); h = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CONFIGURE, _e_manager_cb_window_configure, man); if (h) man->handlers = evas_list_append(man->handlers, h); + e_hints_root_cde_pretend(man->root); return man; }