public class Glib
extends Object
Modifier and Type | Method and Description |
---|---|
static String |
formatSize(long size)
Format a size into a human readable String.
|
static String |
formatSize(long size,
FormatSizeFlags format)
This function is similar to
formatSize() but
allows for flags that modify the output. |
static String |
getProgramName()
Get the internal program name set with
setProgramName() , if any. |
static String |
getRealName()
Returns the real name of the user running the application from
/etc/passwd file. |
static String[] |
getSystemConfigDirs()
Get a list of system-wide XDG configuration directories.
|
static String[] |
getSystemDataDirs()
Get a list of system-wide XDG data directories.
|
static String |
getUserCacheDir()
Get the XDG user specific cache directory.
|
static String |
getUserConfigDir()
Get the XDG user specific configuration directory.
|
static String |
getUserDataDir()
Get the XDG user specific data directory.
|
static String |
getUserName()
Returns the username (i.e Linux login name) running the application.
|
static String |
getUserSpecialDir(UserDirectory directory)
Get the XDG user specific special directory.
|
static void |
idleAdd(Handler handler)
Queue an idle handler to be run during the next iteration of the main
loop.
|
static String |
markupEscapeText(String str)
Perform basic escaping on a String so that it can be safely passed to
XML.
|
static void |
reloadUserSpecialDirsCache()
Reset the cache used for
getUserSpecialDir() . |
static void |
setProgramName(String name)
Change the internal program name used by GLib and GTK for internal
error messages.
|
public static String formatSize(long size)
Sizes use the nearest prefix (kB, MB, GB). The prefix units base is 1000 (i.e. 1 kB is 1000 bytes).
Note that the returned String depends on the localization. E.g. if the system is configured to use French, the formatted size will use French size prefix.
public static String formatSize(long size, FormatSizeFlags format)
formatSize()
but
allows for flags that modify the output. See FormatSizeFlags
.public static String getProgramName()
setProgramName()
, if any.public static String getRealName()
/etc/passwd
file. If it can't be determined
"Unknown"
is returned.
The warning about encoding in getUserName()
also
applies.
public static String[] getSystemConfigDirs()
public static String[] getSystemDataDirs()
public static String getUserCacheDir()
~/.cache
.public static String getUserConfigDir()
~/.config
.public static String getUserDataDir()
~/.local/share
.public static String getUserName()
WARNING:
This method assumes that your system uses UTF-8 as encoding. Please
file a bug if this assumption is not valid for your system.
public static String getUserSpecialDir(UserDirectory directory)
UserDirectory
. System wide defaults are defined in
/etc/xdg/user-dirs.defaults
and can be overridden in
~/.config/user-dir.dirs
.
If you've already queried the "special" directories then those values
are cached; they certainly don't change often. If you're writing a
program that absolutely needs to be aware if those settings have
changed after you're already used this, then you can force up to date
information by calling Glib.reloadUserSpecialDirsCache()
.
public static void idleAdd(Handler handler)
Like all graphical user interfaces, GTK is not thread safe; GUI code
must be run from the main thread, that is, the thread that
Application's run()
[which calls Gtk.main()
] was invoked
from.
In order to make a change to a widget from a worker thread, you must embed the call(s) in an idle handler, as follows:
Glib.idleAdd(new Handler() { public boolean run() { b.setLabel("Press Me"); return false; } });where
b
is a Button you'd previously initialzed and added
to your UI. More generally, you'd just call some doStuff()
method and do your updates there.
The return value in the handler indicates whether or not the idle
function has done it's work; return true
to indicate you
want the handler to be re-invoked. Note that you are blocking the main
loop when your idle handler is running, so if you're doing serious
computation you're best doing that in a worker thread and not in the
idle handler callback.
public static String markupEscapeText(String str)
This will escape &
, >
,
<
, etc which is necessary when passing arbitrary input
to methods which use Pango Markup such as Labels with markup enabled
via setUseMarkup()
and directly with CellRendererText's
setMarkup()
or Layout's
setMarkup()
public static void reloadUserSpecialDirsCache()
getUserSpecialDir()
.
WARNING:
This may cause memory leaks if the return values change between calls.
public static void setProgramName(String name)
(gnome-panel:5581): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to...where "
gnome-panel
" was the name set by that program with
this method call, and 5581
was the process id originating
the message. As you can see, the whole thing is pretty ugly (not to
mention having no context), which is why one of the design goals of
java-gnome is to fully proxy the entire underlying library and have
none of the internals from GLib or GTK be exposed to the Java
developer. If we do our job right, your users should never see a
message like that; at worst it would be reported as a Java stack
trace.
You don't really need to call this, but it's here if you want to make
it clearer in the .xsession-errors
log what the culprit
application is.
Warning
If you wish to use this, it must be called before anything else.
This is the only method in java-gnome that can be called before
Gtk.init()
.