<div dir="ltr"><div><div><div><div><div><div>Hello there guys,<br></div>Thanks to Landry's very descriptive commits, I was able to port Xfce Panel's single most important plugin: Xfce4-Eyes-Plugin!<br></div>Jokes apart, I just wanted to try it out with a simple plugin before porting others.<br></div>Here is code: <a href="https://github.com/andreldm/xfce4-eyes-plugin">https://github.com/andreldm/xfce4-eyes-plugin</a><br></div>(how convenient a push request would be...)<br><br></div>Cheers,<br></div>André Miranda<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 1, 2016 at 9:02 AM, Landry Breuil <span dir="ltr"><<a href="mailto:landry@xfce.org" target="_blank">landry@xfce.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
so, if we want to have Xfce 4.14 with Gtk+3 in a foreseeable future, at<br>
some point porting has to resume/restart.. in the past days, i've spent<br>
some time porting *some* of the panel plugins i *somewhat* maintain, and<br>
here are some tips and tricks:<br>
<br>
* i'm targetting Gtk+3 only, bye-bye Gtk+2. Technically it would be<br>
  doable to support both with some #ifdefs, but is there a point..<br>
* i'm going for a feature-parity target first. No UI revamp, no<br>
  revolution. Ideally, i'd like to move dialog construction to .ui files<br>
/ GtkBuilder, that might come next. Same thing, using cairo drawing<br>
instead of abusing progressbars for monitors/meters might be nice,<br>
maybe next.<br>
* devhelp is your friend to browse the Gtk+3 doc, as is<br>
<a href="https://developer.gnome.org/gtk3/stable/" rel="noreferrer" target="_blank">https://developer.gnome.org/gtk3/stable/</a><br>
* there's an ongoing discussion to know if we finally target 3.14 or<br>
  3.20, as there are some 'breaking' changes wrt styling in >= 3.16 with<br>
css providers (see<br>
<a href="https://blogs.gnome.org/mclasen/2016/04/29/yet-another-gtk-update/" rel="noreferrer" target="_blank">https://blogs.gnome.org/mclasen/2016/04/29/yet-another-gtk-update/</a>)<br>
* styling that worked in 3.14 is considered deprecated in 3.16/3.20, so<br>
  has to be #ifdef'ed, see for example <a href="http://git.xfce.org/panel-plugins/xfce4-systemload-plugin/tree/panel-plugin/systemload.c#n448" rel="noreferrer" target="_blank">http://git.xfce.org/panel-plugins/xfce4-systemload-plugin/tree/panel-plugin/systemload.c#n448</a><br>
* most of the changes are mechanical, Replacing XfceHVBox /<br>
  GtkHBox/GtkVBox by GtkBox, using GtkOrientable, replacing GtkTable by<br>
GtkGrid, replacing GTK_STOCK* macros by their gtk equivalent names,<br>
replacing GtkToggleButton/GtkCheckBox by GtkSwitch, replacing GdkColor<br>
by GdkRGBA, usinc GtkCssProvider instead of setting bg/base colors.. all<br>
this is documented in Gtk+3 doc when a widget is deprecated, and the<br>
general migration doc is here :<br>
<a href="https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html" rel="noreferrer" target="_blank">https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html</a><br>
<br>
So far, i've ported over the following plugins (have a look at the<br>
commits to see what changes are needed):<br>
<br>
<a href="http://git.xfce.org/panel-plugins/xfce4-systemload-plugin/log/" rel="noreferrer" target="_blank">http://git.xfce.org/panel-plugins/xfce4-systemload-plugin/log/</a><br>
<a href="http://git.xfce.org/panel-plugins/xfce4-mpc-plugin/log/" rel="noreferrer" target="_blank">http://git.xfce.org/panel-plugins/xfce4-mpc-plugin/log/</a><br>
<a href="http://git.xfce.org/panel-plugins/xfce4-diskperf-plugin/log/" rel="noreferrer" target="_blank">http://git.xfce.org/panel-plugins/xfce4-diskperf-plugin/log/</a><br>
<a href="http://git.xfce.org/panel-plugins/xfce4-fsguard-plugin/log/" rel="noreferrer" target="_blank">http://git.xfce.org/panel-plugins/xfce4-fsguard-plugin/log/</a><br>
<a href="http://git.xfce.org/panel-plugins/xfce4-datetime-plugin/log/" rel="noreferrer" target="_blank">http://git.xfce.org/panel-plugins/xfce4-datetime-plugin/log/</a><br>
<a href="http://git.xfce.org/panel-plugins/xfce4-smartbookmark-plugin/log/" rel="noreferrer" target="_blank">http://git.xfce.org/panel-plugins/xfce4-smartbookmark-plugin/log/</a><br>
<br>
Not everything is perfect, but things are moving nicely.<br>
<br>
To 'compare' gtk2 and gtk3 version and have both in the same panel, i<br>
use the following trick (for a 'foo' panel plugin):<br>
  * in /usr/share/xfce4/panel/plugins/, copy foo.desktop to foo-git.desktop<br>
  * in foo-git.desktop, only keep untranslated Name/Comment and append 'git' to Name to differentiate plugins<br>
  * append X-XFCE-API=2.0 to foo-git.desktop<br>
  * append '-git' to X-XFCE-Module line<br>
  * symlink path/to/my/workdir/panel-plugin/.libs/libfoo.so to /usr/lib/xfce4/panel/plugins/libfoo-git.so<br>
<br>
xfce4-panel -a should allow you to load the git version of the plugin,<br>
without overwriting the 'released' gtk2 version.<br>
<br>
Mandatory screenshots using clearklooks theme, one with gtk3 versions<br>
<a href="http://i.imgur.com/UwZEaGN.png" rel="noreferrer" target="_blank">http://i.imgur.com/UwZEaGN.png</a> (not all the checkbox are migrated to<br>
gtkswitch, and i know systemload dialog is a bit huge...)<br>
and the same thing with the last release of the same plugins<br>
<a href="http://i.imgur.com/aS44yQV.png" rel="noreferrer" target="_blank">http://i.imgur.com/aS44yQV.png</a> and the two panels with the same plugins<br>
loaded using default config. Okay, progressbars dont look the same,<br>
buttons might be a git bigger...<br>
<br>
All that to say that it's an easy task for someone who wants to start<br>
playing with gtk code and porting to gtk3 - all help on this is welcome!<br>
If there's a plugin you use and care about, and that looks<br>
abandoned/unmaintained, grab the git master, try to apply the same<br>
changes, and post patches to bugzilla/the list.<br>
<br>
Of course, feedback, criticism and testing are welcome! I've only tested<br>
those changes on my OpenBSD desktop with Gtk 3.20.3..<br>
<br>
Landry<br>
_______________________________________________<br>
Xfce4-dev mailing list<br>
<a href="mailto:Xfce4-dev@xfce.org">Xfce4-dev@xfce.org</a><br>
<a href="https://mail.xfce.org/mailman/listinfo/xfce4-dev" rel="noreferrer" target="_blank">https://mail.xfce.org/mailman/listinfo/xfce4-dev</a></blockquote></div><br></div>