Re: Помогите адаптировать dpatch, пожалуйста
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?
Reply to: