Hello there, bmpanel2 users. I’ve just got an email from Karol Cichy and he created a good looking theme that follows Elementary design style.
You can check it out >> here <<
I just want to clarify one more time what “bmpanel2 theme” means and why there are a lot of “no”s about it. People tend to understand bmpane2 themes as let’s say gtk2 themes, but these two are completely different concepts. Gtk2 themes are what I call “skins”, they define a big amount of rules of how you should draw elements and an end user feels free to compose these elements in any way he/she likes. On the other hand bmpanel2 theme is a kind of a snapshot of what you see when you start bmpanel2, and you can’t actually change a lot of look without changing a theme file. The problems come when you have to give people an ability to customize things. For example: user doesn’t want to see a paricular widget on his panel at all, what he/she can do about it? The correct answer here is to change a theme file the way he wants. But is that involve editing text files? Yes and no. Theoretically it is possible to create an utility which will make all you need just in two clicks. The only reason why it is not possible to make that kind of feature inside bmpane2rc is that you just can’t know what is inside a theme to control it flawlessly. There are cases when theme has multiple instances of a widget, how can you tell bmpanel2rc which ones should be removed?
The second conceptual problem is addressing customizable widgets. For example: user wants to have two launch bars, what he/she should specify inside the bmpanel2rc? Frankly, I have no idea. Well, maybe it should be possible to just use two and more launchbar entries and let them be configured sequentially. I mean first launchbar widget uses first launchbar entry in bmpanel2rc, second uses second entry and so on. The other good example here is a “start button”. Let’s say we have a widget that allows you to call just one application you like and we have a theme where this widgets looks exactly like “start” button with literally text label on it. How one should specifiy which app he/she needs to see running when clicking that button? Again, I have no idea.
So, until I will find some interesting concepts here, I will not do anything about these problems. Sorry.
Eventually I would like to see the bmpanel2 as a platform for making “looks” that can be customized in a way theme author wants/allows and not more. I really have a strong opinion that this is a way to go in GUIs. But of course I don’t want to end up with themes being fully featured scripts.
P.S. Sorry for not working on launch bar configurability for a while (gaps between items, background, etc.). I know I promised this, but I’m a bit in a not very good mood right now. 😀
I’ve just added them to the git.
The default values in the config file (~/.config/bmpanel2/bmpanel2rc) will look like this:
mbutton1 use drag mbutton2 kill mbutton3
Note that mbutton2 is a middle mouse button usually (mbutton1 is LMB and mbutton3 is RMB). That’s it I guess. If there are any bugs, send them here.
P.S. However there is a problem with clock widget. The ‘clock_prog’ is fired up depending on ‘clock_mouse_button’ parameter. I’m not sure what should I do about this.
Alternative widgets system and Pager widget were uploaded to the upstream git tree. There will be more updates however in a code and in the Bmpanel2 Theme Reference. Currently you can try it out using xsocam-dark theme and bmpanel2cfg utility (section “Alternatives”, select “pager”).
P.S. Expect bugs…
Currently I just want a desktop switcher like you’ve probably seen in other panels. I mean that one with mini-screens and window previews. As someone in comments on code.google.com had noticed – it will be more practical than the current one. First of all there are window previews, which is basically nice, but I will be able to draw small numbers (representing number of apps of course) on the corner of these mini-screens also using some kind of unintrusive policy – when there are no windows on the desktop just don’t draw any kind of numbers (e.g. zeros).
But let’s get back from the dreamland. I need a way to implement it somehow. There are two major ways to do this:
And I really don’t like (1). Because there are a lot of problems with that. Current theme is just a description of how panel will look like when you’ll start it. Even though most of the users still think of themes as skins, they are not. Introducing alternative widgets on the other hand will break all this picture and make it even more unclear. Themes concept will basically stuck between “theme” and “skin” (in my mind – “theme” is a consistent/seemless look of something, while “skin” is a collection of elements which can be placed and composed in different ways). (2) on the other hand is extremely easy to implement. Due to multimonitor implementation I’m already tracking windows’ position/size. All I need to do is just make a theme description of new desktop switcher elements and simply put the drawing code in. But (2) also forces me to fix all themes according to new widget, which is a big task for me as a programmer (who is obviously isn’t an artist).
So.. What do you think? Should I try to do (1) or (2)?
First of all, I’d like to start from bugs that were fixed (or at least I think they were). There was a bug with clock text and I thought it was fixed long time ago, but it wasn’t. In this patch set I did few more updates to that code and now, finally, I think it works fine. Please, if you see this glitch again after the update, let me know.
And now let’s talk about multihead support. Basically I decided to fully implement xinerama/xrandr dependent functionality and here how it works:
Ok, now what you need to do to start these things up. I will show you on a two monitors example. Let’s suppose we have monitor 0 and 1 (in terms of bmpanel2):
cp ~/.config/bmpanel2/bmpanel2rc ~/.config/bmpanel2/bmpanel2rc_mon1
bmpanel2 --config ~/.config/bmpanel2/bmpanel2rc_mon1 &
Also of course you can modify a theme in this second config file. Or even copy a theme to your ~/.local/share/bmpanel2/themes dir and modify/rename it slightly. For example you might want to remove some widgets from it and/or change the position. If you want to configure your second panel instance with bmpanel2cfg, just use it’s config file as a first argument for bmpanel2cfg utility: bmpanel2cfg ~/.config/bmpanel2/bmpanel2rc_mon1. But don’t forget that it is the shell what changes the “~” to your HOME directory. If you want to add the bmpanel2cfg to let’s say a launch bar, you should use full path (e.g. bmpanel2cfg /home/nsf/.config/bmpanel2/bmpanel2rc_mon1).
And at the end I’d like to say that currently bmpanel2 isn’t actively developed. I’m making changes when there is something that I don’t like, so don’t be mad at me because I’m refusing to implement your feature. But I like to fix bugs, because they are quite challenging and interesting tasks by themselves. Some bugs are much harder to fix than another, so it may take time. Well, that is all I wanted to say. Happy bmpanel2 using.
P.S. Patches were uploaded to the upstream git repositories.
Kinda teaser: http://nsf.110mb.com/bmpanel2_multihead.swf.
I need few more days to test it well with different window managers and fix all glitches. More technical and user-related details in next blog post.. see ya..