On Sun, Dec 05, 2010 at 06:25:45PM +0000, Mikhail Ramendik wrote: > Всем привет! > > Имеется icewm версии из squeeze (1.3.7pre2). Имеется патч к более > старому icewm, полученный из этой же рассылки. > > После некоторой обработки напильником патч успешно накладывается и > снимается вручную.
Тут надо действовать так, как описано в man dpatch-edit-patch: $ dpatch-edit-patch patch new-cool-patch $ patch -p1 < some-patch-from-someone $ edit some.c $ exit 0 Но на самом деле все проще, так как у меня этот патч тоже обновлен и приложен, можешь просто его скопировать. См. аттач. Прикрепляю также пару своих патчей. -- Stanislav
Index: icewm-1.3.7~pre2/src/wmclient.cc =================================================================== --- icewm-1.3.7~pre2.orig/src/wmclient.cc 2010-08-06 13:52:58.000000000 +0400 +++ icewm-1.3.7~pre2/src/wmclient.cc 2010-08-06 13:53:28.000000000 +0400 @@ -417,12 +417,20 @@ switch (property.atom) { case XA_WM_NAME: if (new_prop) prop.wm_name = true; +#if defined(WMSPEC_HINTS) && defined(CONFIG_I18N) + // don't use WM_NAME when we have _NET_WM_NAME + if (!prop.net_wm_name) +#endif getNameHint(); prop.wm_name = new_prop; break; case XA_WM_ICON_NAME: if (new_prop) prop.wm_icon_name = true; +#if defined(WMSPEC_HINTS) && defined(CONFIG_I18N) + // don't use WM_ICON_NAME when we have _NET_WM_ICON_NAME + if (!prop.net_wm_icon_name) +#endif getIconNameHint(); prop.wm_icon_name = false; break; @@ -488,6 +496,14 @@ if (getFrame()) getFrame()->updateNetWMStrut(); prop.net_wm_strut = new_prop; + } else if (property.atom == _XA_NET_WM_NAME) { + if (new_prop) prop.net_wm_name = true; + getNameHint(); + prop.net_wm_name = new_prop; + } else if (property.atom == _XA_NET_WM_ICON_NAME) { + if (new_prop) prop.net_wm_icon_name = true; + getIconNameHint(); + prop.net_wm_icon_name = new_prop; #endif #ifdef WMSPEC_HINTS } else if (property.atom == _XA_NET_WM_ICON) { @@ -775,12 +791,19 @@ } void YFrameClient::getNameHint() { +#ifdef WMSPEC_HINTS + if (!prop.net_wm_name) +#endif if (!prop.wm_name) return; #ifdef CONFIG_I18N XTextProperty name; - if (XGetWMName(xapp->display(), handle(), &name)) + if ( +#ifdef WMSPEC_HINTS + (prop.net_wm_name && XGetTextProperty(xapp->display(), handle(), &name, _XA_NET_WM_NAME)) || +#endif + XGetWMName(xapp->display(), handle(), &name)) #else char *name; if (XFetchName(xapp->display(), handle(), &name)) @@ -797,12 +820,19 @@ } void YFrameClient::getIconNameHint() { +#ifdef WMSPEC_HINTS + if (!prop.net_wm_icon_name) +#endif if (!prop.wm_icon_name) return; #ifdef CONFIG_I18N XTextProperty name; - if (XGetWMIconName(xapp->display(), handle(), &name)) + if ( +#ifdef WMSPEC_HINTS + (prop.net_wm_icon_name && XGetTextProperty(xapp->display(), handle(), &name, _XA_NET_WM_ICON_NAME)) || +#endif + XGetWMIconName(xapp->display(), handle(), &name)) #else char *name; if (XGetIconName(xapp->display(), handle(), &name)) @@ -1708,6 +1738,8 @@ else if (a == _XA_NET_WM_STATE) HAS(prop.net_wm_state); else if (a == _XA_NET_WM_WINDOW_TYPE) HAS(prop.net_wm_window_type); else if (a == _XA_NET_WM_USER_TIME) HAS(prop.net_wm_user_time); + else if (a == _XA_NET_WM_NAME) HAS(prop.net_wm_name); + else if (a == _XA_NET_WM_ICON_NAME) HAS(prop.net_wm_icon_name); #endif #ifdef GNOME1_HINTS else if (a == _XA_WIN_HINTS) HAS(prop.win_hints); Index: icewm-1.3.7~pre2/src/wmclient.h =================================================================== --- icewm-1.3.7~pre2.orig/src/wmclient.h 2010-08-06 13:52:58.000000000 +0400 +++ icewm-1.3.7~pre2/src/wmclient.h 2010-08-06 13:53:28.000000000 +0400 @@ -228,6 +228,8 @@ bool net_wm_state : 1; // no property notify bool net_wm_window_type : 1; bool net_wm_user_time : 1; + bool net_wm_name : 1; + bool net_wm_icon_name : 1; #endif #ifndef NO_MWM_HINTS bool mwm_hints : 1; Index: icewm-1.3.7~pre2/src/yxapp.cc =================================================================== --- icewm-1.3.7~pre2.orig/src/yxapp.cc 2010-08-06 13:52:58.000000000 +0400 +++ icewm-1.3.7~pre2/src/yxapp.cc 2010-08-06 13:58:34.000000000 +0400 @@ -91,6 +91,7 @@ Atom _XA_NET_WM_WINDOW_TYPE_SPLASH; Atom _XA_NET_WM_NAME; +Atom _XA_NET_WM_ICON_NAME; Atom _XA_NET_WM_ICON; Atom _XA_NET_WM_PID; @@ -310,6 +311,7 @@ { &_XA_NET_WM_WINDOW_TYPE_SPLASH, "_NET_WM_WINDOW_TYPE_SPLASH" }, { &_XA_NET_WM_NAME, "_NET_WM_NAME" }, + { &_XA_NET_WM_ICON_NAME, "_NET_WM_ICON_NAME" }, { &_XA_NET_WM_ICON, "_NET_WM_ICON" }, { &_XA_NET_WM_PID, "_NET_WM_PID" }, { &_XA_NET_WM_USER_TIME, "_NET_WM_USER_TIME" },
Index: icewm-1.3.7~pre2/src/wmclient.cc =================================================================== --- icewm-1.3.7~pre2.orig/src/wmclient.cc 2010-08-05 21:26:36.000000000 +0400 +++ icewm-1.3.7~pre2/src/wmclient.cc 2010-08-05 22:35:33.000000000 +0400 @@ -1042,20 +1042,12 @@ unsigned char *prop; while (XGetWindowProperty(display, handle, - propAtom, 0, 16384*32, False, AnyPropertyType, + propAtom, (itemCount * itemSize) / 32, 1024*32, False, AnyPropertyType, &r_type, &r_format, &nitems, &bytes_remain, - &prop) == Success && prop && bytes_remain == 0) + &prop) == Success && prop) { if (r_format == itemSize1 && nitems > 0) { data = realloc(data, (itemCount + nitems) * itemSize / 8); - - // access to memory beyound 256MiB causes crashes! But anyhow, size - // >>2MiB looks suspicious. Detect this case ASAP. However, if - // the usable icon is somewhere in the beginning, it's okay to - // return truncated data. - if(itemCount * itemSize / 8 >= 2097152) - break; - memcpy((char *)data + itemCount * itemSize / 8, prop, nitems * itemSize / 8); itemCount += nitems; XFree(prop);
Index: icewm-1.3.7~pre2/src/aapm.cc =================================================================== --- icewm-1.3.7~pre2.orig/src/aapm.cc 2010-08-05 23:12:00.000000000 +0400 +++ icewm-1.3.7~pre2/src/aapm.cc 2010-08-05 23:20:16.000000000 +0400 @@ -434,8 +434,6 @@ } } fclose(fd); - if (BATcapacity_remain > BATcapacity_full && BATcapacity_design > 0) - BATcapacity_full = BATcapacity_design; } #else union acpi_battery_ioctl_arg battio; @@ -460,6 +458,9 @@ } acpiBatteries[i]->present = BATpresent; + if (BATcapacity_remain > BATcapacity_full) + BATcapacity_remain = BATcapacity_full; + #ifdef __FreeBSD__ close(acpifd); #endif @@ -679,8 +680,6 @@ } fclose(fd); } - if (BATcapacity_remain > BATcapacity_full && BATcapacity_design > 0) - BATcapacity_full = BATcapacity_design; acpiBatteries[i]->capacity_full = BATcapacity_full; } else { @@ -689,6 +688,9 @@ } acpiBatteries[i]->present = BATpresent; + if (BATcapacity_remain > BATcapacity_full) + BATcapacity_remain = BATcapacity_full; + // hatred: for ApmGraph if (BATpresent == BAT_PRESENT && //did we parse the needed values successfully?