AppIndicator does not support BOLD text in menus, since we cater to
the lowest common denominator, we remove bold text for status. We change to use a menu separator to define a "status" at the top of the menu
This commit is contained in:
parent
82ab3fc7bd
commit
87222f8483
@ -37,7 +37,7 @@ class GtkEntryItem extends GtkEntry implements GCallback {
|
|||||||
private volatile Pointer image;
|
private volatile Pointer image;
|
||||||
|
|
||||||
// these are necessary BECAUSE GTK menus look funky as hell when there are some menu entries WITH icons and some WITHOUT
|
// these are necessary BECAUSE GTK menus look funky as hell when there are some menu entries WITH icons and some WITHOUT
|
||||||
private volatile boolean hasLegitIcon = true;
|
protected volatile boolean hasLegitIcon = true;
|
||||||
|
|
||||||
// The mnemonic will ONLY show-up once a menu entry is selected. IT WILL NOT show up before then!
|
// The mnemonic will ONLY show-up once a menu entry is selected. IT WILL NOT show up before then!
|
||||||
// AppIndicators will only show if you use the keyboard to navigate
|
// AppIndicators will only show if you use the keyboard to navigate
|
||||||
@ -52,7 +52,7 @@ class GtkEntryItem extends GtkEntry implements GCallback {
|
|||||||
super(parent, Gtk.gtk_image_menu_item_new_with_mnemonic(""));
|
super(parent, Gtk.gtk_image_menu_item_new_with_mnemonic(""));
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
|
|
||||||
|
// cannot be done in a static initializer, because the tray icon size might not yet have been determined
|
||||||
if (transparentIcon == null) {
|
if (transparentIcon == null) {
|
||||||
transparentIcon = ImageUtils.getTransparentImage(ImageUtils.ENTRY_SIZE);
|
transparentIcon = ImageUtils.getTransparentImage(ImageUtils.ENTRY_SIZE);
|
||||||
}
|
}
|
||||||
@ -149,7 +149,6 @@ class GtkEntryItem extends GtkEntry implements GCallback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Gtk.gtk_menu_item_set_label(_native, text);
|
Gtk.gtk_menu_item_set_label(_native, text);
|
||||||
|
|
||||||
Gtk.gtk_widget_show_all(_native);
|
Gtk.gtk_widget_show_all(_native);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,10 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package dorkbox.systemTray.linux;
|
package dorkbox.systemTray.linux;
|
||||||
|
|
||||||
import com.sun.jna.Pointer;
|
|
||||||
|
|
||||||
import dorkbox.systemTray.SystemTrayMenuAction;
|
import dorkbox.systemTray.SystemTrayMenuAction;
|
||||||
import dorkbox.systemTray.linux.jna.Gobject;
|
|
||||||
import dorkbox.systemTray.linux.jna.Gtk;
|
import dorkbox.systemTray.linux.jna.Gtk;
|
||||||
|
|
||||||
// you might wonder WHY this extends MenuEntryItem -- the reason is that an AppIndicator "status" will be offset from everyone else,
|
// you might wonder WHY this extends MenuEntryItem -- the reason is that an AppIndicator "status" will be offset from everyone else,
|
||||||
@ -31,20 +28,19 @@ class GtkEntryStatus extends GtkEntryItem {
|
|||||||
*/
|
*/
|
||||||
GtkEntryStatus(final GtkMenu parent, final String text) {
|
GtkEntryStatus(final GtkMenu parent, final String text) {
|
||||||
super(parent, null);
|
super(parent, null);
|
||||||
|
// need that extra space so it matches windows/mac
|
||||||
|
hasLegitIcon = false;
|
||||||
setText(text);
|
setText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// called in the GTK thread
|
// called in the GTK thread
|
||||||
@Override
|
@Override
|
||||||
void renderText(final String text) {
|
void renderText(final String text) {
|
||||||
// evil hacks abound...
|
// AppIndicator strips out markup text.
|
||||||
// https://developer.gnome.org/pango/stable/PangoMarkupFormat.html
|
// https://mail.gnome.org/archives/commits-list/2016-March/msg05444.html
|
||||||
|
|
||||||
Pointer label = Gtk.gtk_bin_get_child(_native);
|
Gtk.gtk_menu_item_set_label(_native, text);
|
||||||
Gtk.gtk_label_set_use_markup(label, Gtk.TRUE);
|
Gtk.gtk_widget_show_all(_native);
|
||||||
Pointer markup = Gobject.g_markup_printf_escaped("<b>%s</b>", text);
|
|
||||||
Gtk.gtk_label_set_markup(label, markup);
|
|
||||||
Gobject.g_free(markup);
|
|
||||||
|
|
||||||
Gtk.gtk_widget_set_sensitive(_native, Gtk.FALSE);
|
Gtk.gtk_widget_set_sensitive(_native, Gtk.FALSE);
|
||||||
}
|
}
|
||||||
|
@ -282,14 +282,11 @@ class GtkMenu extends Menu implements MenuEntry {
|
|||||||
|
|
||||||
// now add back other menu entries
|
// now add back other menu entries
|
||||||
synchronized (menuEntries) {
|
synchronized (menuEntries) {
|
||||||
for (int i = 0; i < menuEntries.size(); i++) {
|
for (MenuEntry menuEntry__ : menuEntries) {
|
||||||
MenuEntry menuEntry__ = menuEntries.get(i);
|
|
||||||
hasImages |= menuEntry__.hasImage();
|
hasImages |= menuEntry__.hasImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < menuEntries.size(); i++) {
|
for (MenuEntry menuEntry__ : menuEntries) {
|
||||||
MenuEntry menuEntry__ = menuEntries.get(i);
|
|
||||||
|
|
||||||
// the menu entry looks FUNKY when there are a mis-match of entries WITH and WITHOUT images
|
// the menu entry looks FUNKY when there are a mis-match of entries WITH and WITHOUT images
|
||||||
if (menuEntry__ instanceof GtkEntry) {
|
if (menuEntry__ instanceof GtkEntry) {
|
||||||
GtkEntry entry = (GtkEntry) menuEntry__;
|
GtkEntry entry = (GtkEntry) menuEntry__;
|
||||||
|
@ -38,7 +38,7 @@ import dorkbox.systemTray.util.Swt;
|
|||||||
*
|
*
|
||||||
* Direct-mapping, See: https://github.com/java-native-access/jna/blob/master/www/DirectMapping.md
|
* Direct-mapping, See: https://github.com/java-native-access/jna/blob/master/www/DirectMapping.md
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("Duplicates")
|
@SuppressWarnings({"Duplicates", "SameParameterValue", "DanglingJavadoc"})
|
||||||
public
|
public
|
||||||
class Gtk {
|
class Gtk {
|
||||||
// For funsies to look at, SyncThing did a LOT of work on compatibility in python (unfortunate for us, but interesting).
|
// For funsies to look at, SyncThing did a LOT of work on compatibility in python (unfortunate for us, but interesting).
|
||||||
@ -436,14 +436,6 @@ class Gtk {
|
|||||||
|
|
||||||
public static native void gtk_image_menu_item_set_always_show_image(Pointer menu_item, int forceShow);
|
public static native void gtk_image_menu_item_set_always_show_image(Pointer menu_item, int forceShow);
|
||||||
|
|
||||||
public static native Pointer gtk_bin_get_child(Pointer parent);
|
|
||||||
|
|
||||||
public static native void gtk_label_set_text(Pointer label, String text);
|
|
||||||
|
|
||||||
public static native void gtk_label_set_markup(Pointer label, Pointer markup);
|
|
||||||
|
|
||||||
public static native void gtk_label_set_use_markup(Pointer label, int gboolean);
|
|
||||||
|
|
||||||
public static native Pointer gtk_status_icon_new();
|
public static native Pointer gtk_status_icon_new();
|
||||||
|
|
||||||
public static native void gtk_status_icon_set_from_file(Pointer widget, String label);
|
public static native void gtk_status_icon_set_from_file(Pointer widget, String label);
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package dorkbox.systemTray.swing;
|
package dorkbox.systemTray.swing;
|
||||||
|
|
||||||
import java.awt.Font;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import javax.swing.JMenuItem;
|
import javax.swing.JMenuItem;
|
||||||
@ -34,10 +33,10 @@ class SwingEntryStatus extends SwingEntry implements MenuStatus {
|
|||||||
// called in the EDT thread
|
// called in the EDT thread
|
||||||
@Override
|
@Override
|
||||||
void renderText(final String text) {
|
void renderText(final String text) {
|
||||||
|
// AppIndicator strips out markup text, so we disable bold in order to have all of the menus MOSTLY look the same
|
||||||
|
// https://mail.gnome.org/archives/commits-list/2016-March/msg05444.html
|
||||||
|
|
||||||
((JMenuItem) _native).setText(text);
|
((JMenuItem) _native).setText(text);
|
||||||
Font font = _native.getFont();
|
|
||||||
Font font1 = font.deriveFont(Font.BOLD);
|
|
||||||
_native.setFont(font1);
|
|
||||||
|
|
||||||
_native.setEnabled(false);
|
_native.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user