Authentication-Results: mail-b.sr.ht; dkim=pass header.d=gmail.com header.i=@gmail.com Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) by mail-b.sr.ht (Postfix) with ESMTPS id CA8AA11EF53 for <~alextee/zrythm-devel@lists.sr.ht>; Sat, 16 Apr 2022 17:10:38 +0000 (UTC) Received: by mail-lj1-f170.google.com with SMTP id bf11so843480ljb.7 for <~alextee/zrythm-devel@lists.sr.ht>; Sat, 16 Apr 2022 10:10:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=TsHnd88+sa6RBldigtze//0wVnezJH82jmG5hevZQuk=; b=Vepm0zVxTzNh6/0aeySptWGm7yz6UdakElZHVHyZm035yHOjwzg+oPiXNoupSi0yHa KrqOJvzX2YovF3sQggEBEx0Jjw+AhswZfY/HwvVoeM7VXoxKyQT0wz+S48jo6Cy6d+AV sjrTRYBLbWHrw5JoqXvV5HdE8qrf7EUdSy9v4XsJEEKDW+OYJHglTfkrps+mp7S81ahv oOeruPDX3fchl7CQmyKfWz1zCT5lEjfte6XvpAvdtgNuofEkmAUE+tq3670LGqYWdtD0 nMiBFIFjw7Kcp8Gy2gToWCd9adf50qsFa5j0YJp9zixao72RuT8Nj+71NbIf/GH3110V 8dPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=TsHnd88+sa6RBldigtze//0wVnezJH82jmG5hevZQuk=; b=25KuwYW9VxlkKeCJueT8gVCCEzMQO9GF0U/05bgUc2p8jXKQk40wqvrk0ZOCtZ7k7F 47MwbW2fnx926WpkMfCQJRWAz8OS5lQ5e7KW+hC0K/FcxPYL88qDjceTpRIzPHwhFNJR h9vaoB7gIcgaQMQ6WBiqWbLns0/H2mU+fXZPmp5Z2XbvVDq+yJXZUS25P2GBkAm1f+f9 ExwmE5kzdap49wHWC3Rc2+xoZIMsQaaCseCALGPx7Qazzmvg7M0mBCWd0VxymtA3PIfO Kh65iDzClua1KIxZ6cLvU101GrdcQp+PmIKiPf3OckfdnOLygX7JsPOa7Cb8ioZdVP2t WZEA== X-Gm-Message-State: AOAM533in1jHDSrH3s/e1SsLr+5QsR/DuiDlXp7IG3taN+vobEB31lBN XFSL5pWT6d0C/sU5lWbHbIJV5ovtzSCe6g== X-Google-Smtp-Source: ABdhPJyAf1/RfDdhFH/DUXh+XCFR0/0l+l/eexjFIscB3yD/r5dBeR3bdmtMm8cTeU4lLOdhi/ep2A== X-Received: by 2002:a17:907:7b9d:b0:6df:fb8f:fe82 with SMTP id ne29-20020a1709077b9d00b006dffb8ffe82mr3250131ejc.652.1650128710020; Sat, 16 Apr 2022 10:05:10 -0700 (PDT) Received: from localhost.localdomain (20014C4C12B75D00CC402D9F87667E4B.catv.pool.telekom.hu. [2001:4c4c:12b7:5d00:cc40:2d9f:8766:7e4b]) by smtp.gmail.com with ESMTPSA id f10-20020a056402328a00b0041f7a15a59fsm4276432eda.16.2022.04.16.10.05.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Apr 2022 10:05:09 -0700 (PDT) From: Robert Panovics To: ~alextee/zrythm-devel@lists.sr.ht Cc: Robert Panovics Subject: [PATCH] Popover menu position fix on bottom bar Date: Sat, 16 Apr 2022 19:04:53 +0200 Message-Id: <20220416170453.11384-1-robert.panovics@gmail.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Reparenting of popover menu for transport playhead and BPM for positioning Fixes https://todo.sr.ht/~alextee/zrythm-bug/860 Signed-off-by: Robert Panovics --- inc/gui/widgets/bot_bar.h | 2 -- inc/gui/widgets/digital_meter.h | 12 ++++++++++++ src/gui/widgets/bot_bar.c | 18 +++++------------- src/gui/widgets/digital_meter.c | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/inc/gui/widgets/bot_bar.h b/inc/gui/widgets/bot_bar.h index 070e52910..713bd76af 100644 --- a/inc/gui/widgets/bot_bar.h +++ b/inc/gui/widgets/bot_bar.h @@ -110,8 +110,6 @@ typedef struct _BotBarWidget char green_hex[8]; char red_hex[8]; - /** Popover to be reused for context menus. */ - GtkPopoverMenu * popover_menu; } BotBarWidget; void diff --git a/inc/gui/widgets/digital_meter.h b/inc/gui/widgets/digital_meter.h index d745d1355..cf31600cf 100644 --- a/inc/gui/widgets/digital_meter.h +++ b/inc/gui/widgets/digital_meter.h @@ -180,6 +180,8 @@ typedef struct _DigitalMeterWidget PangoLayout * normal_layout; bool initialized; + + GtkPopoverMenu * popover_menu; } DigitalMeterWidget; /** @@ -231,6 +233,16 @@ digital_meter_set_draw_line ( DigitalMeterWidget * self, int draw_line); +/** + * Shows the widgets popover menu with the provided content + * + * @param menu content of the popover menu + */ +void +digital_meter_show_context_menu ( + DigitalMeterWidget * self, + GMenu * menu); + /** * @} */ diff --git a/src/gui/widgets/bot_bar.c b/src/gui/widgets/bot_bar.c index dc3cec839..b65a5a242 100644 --- a/src/gui/widgets/bot_bar.c +++ b/src/gui/widgets/bot_bar.c @@ -147,8 +147,8 @@ on_bpm_right_click ( _ ("Tap"), NULL, "app.tap-bpm"); g_menu_append_item (menu, menuitem); - z_gtk_show_context_menu_from_g_menu ( - self->popover_menu, x, y, menu); + digital_meter_show_context_menu ( + self->digital_bpm, menu); } static void @@ -214,11 +214,11 @@ on_transport_playhead_right_click ( #endif gtk_widget_insert_action_group ( - GTK_WIDGET (self), "bot-bar", + GTK_WIDGET (self->digital_transport), "bot-bar", G_ACTION_GROUP (action_group)); - z_gtk_show_context_menu_from_g_menu ( - self->popover_menu, x, y, menu); + digital_meter_show_context_menu ( + self->digital_transport, menu); } void @@ -598,8 +598,6 @@ bot_bar_widget_setup (BotBarWidget * self) static void dispose (BotBarWidget * self) { - gtk_widget_unparent ( - GTK_WIDGET (self->popover_menu)); gtk_widget_unparent ( GTK_WIDGET (self->center_box)); @@ -617,12 +615,6 @@ bot_bar_widget_init (BotBarWidget * self) gtk_widget_init_template (GTK_WIDGET (self)); - self->popover_menu = GTK_POPOVER_MENU ( - gtk_popover_menu_new_from_model (NULL)); - gtk_widget_set_parent ( - GTK_WIDGET (self->popover_menu), - GTK_WIDGET (self)); - ui_gdk_rgba_to_hex ( &UI_COLORS->bright_orange, self->hex_color); ui_gdk_rgba_to_hex ( diff --git a/src/gui/widgets/digital_meter.c b/src/gui/widgets/digital_meter.c index c3622d05f..5a0df4cea 100644 --- a/src/gui/widgets/digital_meter.c +++ b/src/gui/widgets/digital_meter.c @@ -884,6 +884,19 @@ digital_meter_set_draw_line ( gtk_widget_queue_draw (GTK_WIDGET (self)); } +void +digital_meter_show_context_menu ( + DigitalMeterWidget * self, + GMenu * menu) +{ + z_gtk_show_context_menu_from_g_menu ( + self->popover_menu, + gtk_widget_get_allocated_width ( + GTK_WIDGET (self)) + / 2.0, + 0.0, menu); +} + /** * Motion callback. */ @@ -1392,6 +1405,16 @@ _digital_meter_widget_new_for_position ( return self; } +static void +dispose (DigitalMeterWidget * self) +{ + gtk_widget_unparent ( + GTK_WIDGET (self->popover_menu)); + + G_OBJECT_CLASS (digital_meter_widget_parent_class) + ->dispose (G_OBJECT (self)); +} + static void finalize (DigitalMeterWidget * self) { @@ -1418,8 +1441,12 @@ digital_meter_widget_class_init ( gtk_widget_class_set_css_name ( wklass, "digital-meter"); + gtk_widget_class_set_layout_manager_type ( + wklass, GTK_TYPE_BIN_LAYOUT); + GObjectClass * oklass = G_OBJECT_CLASS (klass); oklass->finalize = (GObjectFinalizeFunc) finalize; + oklass->dispose = (GObjectFinalizeFunc) dispose; } static void @@ -1473,4 +1500,10 @@ digital_meter_widget_init ( gtk_widget_add_controller ( GTK_WIDGET (self), GTK_EVENT_CONTROLLER (click_gesture)); + + self->popover_menu = GTK_POPOVER_MENU ( + gtk_popover_menu_new_from_model (NULL)); + gtk_widget_set_parent ( + GTK_WIDGET (self->popover_menu), + GTK_WIDGET (self)); } -- 2.35.1