New notes plugin release 1.7.3
Three months since the last release, and three months since it is available as a separate standalone application running in the notification area. This has made it a lot easier to test and debug, as before I had to build the plugin, install the plugin, restart the panel or remove/readd the plugin in the panel, now I just have to run ./xfce4-notes from the source directory.This new release has seen some structural tree changes to save time during compilation. Now everything is in src/ and lib/, where lib/ contains code to build an XnpHypertextView, an XnpNote (a composite-widget that embeds a GtkScrolledWindow with an XnpHypertextView and sends “save” signals on changes), an XnpWindow with the custom made navigation and title bars and the right click menu on the title bar, and finally an XnpApplication class that is the heart of everything, it handles creations/deletions of notes, loads/saves the data, etc. The src/ directory contains the main files for the panel plugin, the status icon, the popup command and the settings dialogue.
The new stuff is mostly eye-candy as stated in the previous blog entry. The GTK+ RC style has been pimped up with custom made scrollbars and the source code contains a self-drawn close button. The stuff about GTK+ scrollbars theming is grossly explained on live.gnome.org but I opened the GTK+ Dust theme files which was, to me, more understandable :-) Also it was because of this particular theme I took a look at customizing the scrollbars, see below the before/after screenshots. The older article about writing a Widget with Cairo helped me getting started from scratch with an empty “close button” widget to replace the simple GtkButton with label. As I liked very much the time passed on these changes I contributed a tutorial “Monochrome icon” available only in PDF as of today which I hope to be useful for Vala beginners but also a nice update of the article about Cairo but with Vala language.
The fixes included in this release are the following: correctly restore sticky-window and keep-above states after some race conditions, and restore tab label orientation after renaming a note. And last but definitely not least the undo feature was not working because an internal timeout wasn't reset to zero which made the code think a snapshot was needed and thus the undo/redo buffers ended with the same content after the timeout elapsed. Thanks to Christian (the developer behind Midori) otherwise I would still not have taken a look around this!
The forthcoming features I have in mind would be a search dialogue and per-note options for activating a stripped down “markdown” syntax, an orthographic corrector and wrapping words which is the default for the moment.
The release is available at archive.xfce.org.
Thanks for the feedbacks and reports you sent and will send back.
Update: The tutorial is now also available on the Xfce wiki.
March Xfce desktop
Shook up my Xfce desktop a bit. I've always been a fan of darker environments, especially those with blue tones. This one's mysterious and fantastic. I did keep the same icon theme as last month, as I don't have anything more suitable installed at the moment. I'm still looking for something a bit more suited to my current setup.
icons: Area o.43
gtk+: Cold Blue, my own theme based on this one. Still a work in progress; I'm trying to get the colors to match the background image. (Pixmap and Mist engines)
xfwm4: Rezlooks-gtk
background: Summerwood
The uncluttered version that shows off the wallpaper:
Applications
You can find the ebuild for The Widget Factory in my in my overlay. The audio player is Decibel in the "mini" mode. I'm using Thunar as my filemanager.
Panel
The left side of the panel has the start menu, followed by launchers for my favorite apps: Terminal, editors (submenu), Thunar, Firefox, Claws Mail, and instant message applications (submenu).
I used to just have gVim in the editor launcher, and just irssi in the IM apps launcher. However, I was tired of having to drill down through a few start menus for my frequently used applications, so I just stuck 'em in their own easy-access submenu on my panel. Using submenus is one of the most overlooked abilities of the Xfce panel. In 5 years or so I've never really tried it out, but now I'm seeing some real benefits. I get quick access to my often-used apps, but without wasting panel space on a bunch of individual launchers.
Here's the editors menu:
An ebuild for PyRoom is available in overnight.
. . . and the IM apps:
After the launchers, there's a taskbar, then a genmon (generic monitor) applet. It runs my Portage script that checks the last time I ran emerge --sync
. Here it is, lastsync.sh
:
#!/bin/bash qlop -s | sed 's/\ >>>.*//' | tail -n1 | xargs -i date --date="{}" '+%b %d'
You need portage-utils
to make it work.
After genmon, there are plugins for volume control, the Orage clock, and weather.
Nifty, eh?
Overnight overlay
I've added a few more ebuilds to my overlay, including a useful calendar utility called gsimplecal. It was originally written for tint2, but since it just uses gtk+, it's suitable for just about any environment. It doesn't come with the Xfce dependencies of Orage; it's just a quick, simple calendar.
If you use tint2, you can actually configure the clock to show gsimplecal just by clicking it. Clicking again quits the program. While tint2 doesn't actually have a launcher function (yet?), this is as close as it gets. You can do some pretty tricky things just by using the built-in clock click actions. Left click for gsimplecal, right click to launch a weather checker, for example.
I've bumped a few packages to the latest version, which included some build/install fixes for Fotoxx and Printoxx. Fotoxx, I'm happy to say, has finally dropped the dependency on freeimage
. Freeimage was removed from Gentoo awhile ago because it has unfixed security vulnerabilities against the bundled libraries, which are really copies of things probably already installed on your system. Fotoxx relied on freeimage only to work with TIFF images. Fotoxx 9.8 and up now just use libtiff
directly. Security improvements for the win.
Keep checking my overlay; I'm always adding nifty new applications and cleaning up existing ebuilds.
Include custom GTK+ RC style
I've been using a custom GTK+ RC style for the notes plugin since the version 1.4.0, right now it is at version 1.7.2. I have been playing with GTK+ theming again these last two hours, and I've get custom scrollbars, a gradient for the custom-made “title bar”, and better colours for the notebook to get the current tab stand out from the crowd.While experimenting on a test-case code I found out a better way to parse a gtkrc file in the program. The first time I was fighting with the existing gtk_rc related functions, I gave up on a solution I partially dislike that is to include a line to the custom gtkrc file within ~/.gtkrc-2.0.
Today I understood how gtk_rc_parse(filename) behaves. You have to call this function at the beginning of the program before building any widgets, it will work even if the file doesn't exist yet. Next, while the program is running, you can modify the file, create it, delete it, truncate it, whatever, and call gtk_rc_reparse_all() to get the style refreshed in the GUI. It's hard to believe that such easy things are sometimes a PITA :-)
Be prepared for a 1.7.3 notes plugin with nicer colours.
SCALE 8x recap
So SCALE 8x went okay.
I was interviewed by the SCALE Public Relations team; you can see the video here.
Gentoo@SCALE
I'd say we had the most diverse assortment of machines at any booth -- something like 10 different machines on 5 architectures. Certainly we had a bunch of developers; we haven't had a showing like this since SCALE 5x.
Everyone loves event pictures, so here's the Gentoo team:
Left to right: vapier, nightmorph, antarus, nerdboy, wormo, omp, halcy0n, solar
Not pictured: blackace (he took the picture)
And now, the hardware running Gentoo! On the table, from left to right:
1. Beagleboard running E17 on the huge monitor
2. Hammer/Nail board by Tin Can Tools (in the clear orange-capped tube)
3. Blackfin development board (hooked up to the middle keyboard, and with a touchscreen running Doom)
4. deployed Blackfin module (that 2-inch square to the left of the wireless mouse)
5. my Core2 Thinkpad running KDE4
6. a mini-notebook
7. OLPC XO (green/white, on top)
8. PowerPC Walnut board (in the K'Nex case). Barely visible behind it is the laptop that's tied in via serial port.
There were a few other Gentoo-powered laptops, subnotebooks, and smartphones demoed throughout the conference, but not all of 'em are visible in this picture.
I mostly demoed KDE 4.3 on my laptop, since the desktop effects and eye candy proved to be a good draw, especially the "falling snowflakes" animation. Man, I love that thing! It's a built-in KWin effect, so there's nothing special to install. Now all I want is a "falling raindrops" effect on my desktop, without resorting to Compiz.
I did occasionally switch the laptop to Xfce when I wanted to save power, or just to showcase Gentoo's flexibility. I got a good draw not when showing a standard Gentoo wallpaper, but when I showed off a desktop rather like this (clean version here). There were a buncha little kids that stopped by and oohed and ahhed over that for a bit.
Sessions@SCALE
The talks were rather disappointing this year. Several of my fellow devs stated that they "just plain sucked." Basically, none of us attended because of the talks. There just weren't any powerful draws. I was only vaguely interested in attending a couple of sessions, the ones on startup-up/embedded improvements and building a featherweight desktop. Didn't actually get to see those, as the timing and draw was just kinda "meh."
Instead, I found myself at the Mindstorms talk, which was very lackluster. I expected to see lots of toys in action, and videos, and whatnot. The speaker wasn't at all engaging, and the single Lego robot was impossible to see, and it wasn't working correctly for the entire presentation. I stopped by another session or two, but nothing grabbed my interest. I spent most of my time on the show floor, helping in the booth or wandering the floor. Speaking of which . ..
KDE@SCALE
I stopped by the KDE booth to see the newest 4.4 and 4.5 stuff being demoed, and I also tried to help one of the devs figure out the build dependencies for one of the latest libraries. Man, source building on Ubuntu sucks. There's some really, really nifty Plasma desktop stuff going on for small screens. The newspaper-like activity flow is something I wouldn't mind using day-to-day on my workstation.
Another neat bit of 4.4/4.5 is the ability to switch your Plasma desktop widgets while still keeping your applications open in front of you. It's sort of the opposite of workspace switchers, where each application group is on a separate virtual workspace, while the desktop remains fixed. I never bother with more than one workspace, but I do like the idea of switching the widgets behind whatever it is I'm working on.
The 4.4 improvements and upcoming 4.5 features are definitely enough to keep me interested in KDE, so I'll leave it on my laptop and look forward to the day 4.4 is stabilized in Gentoo.
Elsewhere@SCALE
The Gnome and XBMC booths were just across the alley from our booth, but I didn't get a chance to check out either. The Gnome guys blasted pounding techno music the whole conference, which gave all of us--even the ones without hangovers--good-sized headaches. The XBMC folks were running some pretty impressive demos on their Zotac MAG, but unfortunately I didn't get a chance to go over and chat with 'em.
In the last few days, I've decided to put together a living room HTPC built around an Acer Aspire Revo and XBMC Live, and it woulda been good to see the thing properly demoed a couple of weeks ago. Still, from what I saw from the Gentoo booth, XBMC is one heck of an awesome app.
Our booth was fairly well trafficked, but overall it felt like attendance (and interest in Gentoo) was down from previous years. Take that with a huge grain of salt, though -- while I felt like SCALE was more sparsely attended and the talks sucked, the actual numbers tell a different story. The event organizers say attendance was up more than 10% and there were more standing-room-only talks than ever before. So make of that what you will -- but I might not go back next year if it's going to be anything like my experience this year. There need to be more sessions that are relevant to my interests.
One of the high points of SCALE was meeting the folks interested in Gentoo, and definitely talking with our existing users, like the ever-loyal calculus from IRC. Thanks for coming by, folks!
Show/hide functionality from notification area
When using a status icon within the notification area it is common to use the left-click action to show/hide the main window. Obviously this is often done in different ways. So here is my tip on how to do it right :-)What I believe to me the most sense-full way is to:
- Check if the application is invisible and show it,
- Otherwise check if the window is inactive and present it,
- Otherwise hide it.
/* Show the window */I have been doing this for quite a long time inside the Xfce Notes plugin, except a little different with multiple windows.
if (!(GTK_WIDGET_VISIBLE(window))) {
gtk_widget_show(window);
}
/* Present the window */
else if (!gtk_window_is_active(GTK_WINDOW(window))) {
gtk_window_present(GTK_WINDOW(window));
}
/* Hide the window */
else {
int winx, winy;
gtk_window_get_position(GTK_WINDOW(window), &winx, &winy);
gtk_widget_hide(window);
gtk_window_move(GTK_WINDOW(window), winx, winy);
}
Some remarks, the PendingSealings proposes gtk_widget_get_visible instead of its analogous MACRO. And as you may also notice when the window is hidden it gets moved just after, this is important as otherwise the window would be repositioned by its initial value once shown again (e.g. centre of screen or dynamically by the window manager).