summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--applets/clock/clock.c19
-rw-r--r--applets/wncklet/wayland-backend.c17
-rw-r--r--configure.ac2
-rw-r--r--libmate-panel-applet/mate-panel-applet.c28
-rw-r--r--libmate-panel-applet/mate-panel-applet.h4
5 files changed, 67 insertions, 3 deletions
diff --git a/applets/clock/clock.c b/applets/clock/clock.c
index 2e26b39f..bc01b290 100644
--- a/applets/clock/clock.c
+++ b/applets/clock/clock.c
@@ -1436,6 +1436,21 @@ toggle_calendar (GtkWidget *button,
}
static gboolean
+clock_applet_activate (MatePanelApplet *applet,
+ const gchar *action,
+ guint32 timestamp,
+ ClockData *cd)
+{
+ if (g_strcmp0 (action, "toggle-calendar") == 0) {
+ /* Toggle the button state first, then activate popup */
+ gboolean current_state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->panel_button));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cd->panel_button), !current_state);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static gboolean
do_not_eat_button_press (GtkWidget *widget,
GdkEventButton *event)
{
@@ -2739,6 +2754,10 @@ fill_clock_applet (MatePanelApplet *applet)
G_CALLBACK (applet_change_orient),
cd);
+ g_signal_connect (cd->applet, "activate",
+ G_CALLBACK (clock_applet_activate),
+ cd);
+
g_signal_connect (cd->panel_button, "size-allocate",
G_CALLBACK (panel_button_change_pixel_size),
cd);
diff --git a/applets/wncklet/wayland-backend.c b/applets/wncklet/wayland-backend.c
index 001149e7..30469894 100644
--- a/applets/wncklet/wayland-backend.c
+++ b/applets/wncklet/wayland-backend.c
@@ -68,6 +68,8 @@ typedef struct
gboolean fullscreen;
} ToplevelTask;
+static int tasklist_invocations = 0;
+
static const char *tasklist_manager_key = "tasklist_manager";
static const char *toplevel_task_key = "toplevel_task";
@@ -497,7 +499,12 @@ foreign_toplevel_handle_closed (void *data,
outer_box = gtk_widget_get_parent (GTK_WIDGET (task->button));
gtk_widget_destroy (task->button);
buttons = buttons -1;
- real_buttons = buttons / 2;
+
+ if (tasklist_invocations > 1)
+ real_buttons = buttons / 2;
+
+ else
+ real_buttons = buttons;
if (real_buttons == 0)
return;
@@ -704,7 +711,11 @@ toplevel_task_new (TasklistManager *tasklist, struct zwlr_foreign_toplevel_handl
if (tasklist_width <= 2)
tasklist_width = panel_width / 3;
- real_buttons = MAX ((buttons / 2), 1);
+ if (tasklist_invocations > 1)
+ real_buttons = MAX ((buttons / 2), 1);
+
+ else
+ real_buttons = MAX ((buttons), 1);
/*always allow at least three buttons to fit without adjustment
*so short window lists don't overflow
@@ -738,6 +749,8 @@ wayland_tasklist_new ()
{
wayland_tasklist_init_if_needed ();
TasklistManager *tasklist = tasklist_manager_new ();
+
+ tasklist_invocations = tasklist_invocations + 1;
if (!tasklist)
return gtk_label_new ("Shell does not support WLR Foreign Toplevel Control");
return tasklist->outer_box;
diff --git a/configure.ac b/configure.ac
index f610cc46..92dd8aae 100644
--- a/configure.ac
+++ b/configure.ac
@@ -15,7 +15,7 @@ MATE_COMMON_INIT
# change to C+1:0:0
# - If the interface is the same as the previous version, change to C:R+1:A
-LIB_MATE_PANEL_APPLET_LT_VERSION=1:1:0
+LIB_MATE_PANEL_APPLET_LT_VERSION=2:0:0
AC_SUBST(LIB_MATE_PANEL_APPLET_LT_VERSION)
AM_MAINTAINER_MODE
diff --git a/libmate-panel-applet/mate-panel-applet.c b/libmate-panel-applet/mate-panel-applet.c
index 897f1726..a4118165 100644
--- a/libmate-panel-applet/mate-panel-applet.c
+++ b/libmate-panel-applet/mate-panel-applet.c
@@ -94,6 +94,7 @@ enum {
CHANGE_SIZE,
CHANGE_BACKGROUND,
MOVE_FOCUS_OUT_OF_APPLET,
+ ACTIVATE,
LAST_SIGNAL
};
@@ -2150,6 +2151,19 @@ mate_panel_applet_class_init (MatePanelAppletClass *klass)
1,
GTK_TYPE_DIRECTION_TYPE);
+ mate_panel_applet_signals [ACTIVATE] =
+ g_signal_new ("activate",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (MatePanelAppletClass, activate),
+ g_signal_accumulator_true_handled,
+ NULL,
+ NULL,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_STRING,
+ G_TYPE_UINT);
+
binding_set = gtk_binding_set_by_class (gobject_class);
add_tab_bindings (binding_set, 0, GTK_DIR_TAB_FORWARD);
add_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD);
@@ -2213,6 +2227,15 @@ method_call_cb (GDBusConnection *connection,
gdk_event_free (event);
g_dbus_method_invocation_return_value (invocation, NULL);
+ } else if (g_strcmp0 (method_name, "Activate") == 0) {
+ const gchar *action;
+ guint32 timestamp;
+ gboolean success = FALSE;
+
+ g_variant_get (parameters, "(&su)", &action, &timestamp);
+
+ g_signal_emit_by_name (applet, "activate", action, timestamp, &success);
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", success));
}
}
@@ -2303,6 +2326,11 @@ static const gchar introspection_xml[] =
"<arg name='button' type='u' direction='in'/>"
"<arg name='time' type='u' direction='in'/>"
"</method>"
+ "<method name='Activate'>"
+ "<arg name='action' type='s' direction='in'/>"
+ "<arg name='timestamp' type='u' direction='in'/>"
+ "<arg name='success' type='b' direction='out'/>"
+ "</method>"
"<property name='PrefsPath' type='s' access='readwrite'/>"
"<property name='Orient' type='u' access='readwrite' />"
"<property name='Size' type='u' access='readwrite'/>"
diff --git a/libmate-panel-applet/mate-panel-applet.h b/libmate-panel-applet/mate-panel-applet.h
index 9cc48ae8..5c8550dc 100644
--- a/libmate-panel-applet/mate-panel-applet.h
+++ b/libmate-panel-applet/mate-panel-applet.h
@@ -78,6 +78,10 @@ struct _MatePanelAppletClass {
void (*move_focus_out_of_applet) (MatePanelApplet *frame,
GtkDirectionType direction);
+
+ gboolean (*activate) (MatePanelApplet *applet,
+ const gchar *action,
+ guint32 timestamp);
};
GtkWidget* mate_panel_applet_new (void);