forked from AuroraMiddleware/gtk
make the orientation flipping much simpler by using the GtkOrientable
2009-02-19 Michael Natterer <mitch@imendio.com> * gtk/gtkscalebutton.c: make the orientation flipping much simpler by using the GtkOrientable features of the involved widgets: (gtk_scale_button_init): create the frame, box and scale here, they never need to be recreated because they implement GtkOrientable. (gtk_scale_button_constructor): remove their construction here. (gtk_scale_button_set_orientation): don't destroy and re-create anything. Instead, simply set the orientation of the above created widgets and fiddle a bit with the "plus" and "minus" buttons' packing and the scale's "inverted" state. Remove separate internal GtkScaleButtonHScale and GtkScaleButtonVScale subclasses and simply have a GtkScaleButtonScale directly inherited from GtkScale. svn path=/trunk/; revision=22375
This commit is contained in:
parent
72e75a5d93
commit
9da282480f
19
ChangeLog
19
ChangeLog
@ -1,3 +1,22 @@
|
|||||||
|
2009-02-19 Michael Natterer <mitch@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkscalebutton.c: make the orientation flipping much simpler
|
||||||
|
by using the GtkOrientable features of the involved widgets:
|
||||||
|
|
||||||
|
(gtk_scale_button_init): create the frame, box and scale here,
|
||||||
|
they never need to be recreated because they implement GtkOrientable.
|
||||||
|
|
||||||
|
(gtk_scale_button_constructor): remove their construction here.
|
||||||
|
|
||||||
|
(gtk_scale_button_set_orientation): don't destroy and re-create
|
||||||
|
anything. Instead, simply set the orientation of the above created
|
||||||
|
widgets and fiddle a bit with the "plus" and "minus" buttons'
|
||||||
|
packing and the scale's "inverted" state.
|
||||||
|
|
||||||
|
Remove separate internal GtkScaleButtonHScale and
|
||||||
|
GtkScaleButtonVScale subclasses and simply have a
|
||||||
|
GtkScaleButtonScale directly inherited from GtkScale.
|
||||||
|
|
||||||
2009-02-19 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
2009-02-19 Theppitak Karoonboonyanan <thep@linux.thai.net>
|
||||||
|
|
||||||
* modules/input/gtkimcontextthai.c (is_context_lost_key): Revert the
|
* modules/input/gtkimcontextthai.c (is_context_lost_key): Revert the
|
||||||
|
@ -45,21 +45,19 @@
|
|||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
#include <gdk/gdkkeysyms.h>
|
#include <gdk/gdkkeysyms.h>
|
||||||
|
|
||||||
#include "gtkmain.h"
|
|
||||||
#include "gtkintl.h"
|
|
||||||
#include "gtkbindings.h"
|
#include "gtkbindings.h"
|
||||||
#include "gtkhscale.h"
|
|
||||||
#include "gtkvscale.h"
|
|
||||||
#include "gtkframe.h"
|
#include "gtkframe.h"
|
||||||
|
#include "gtkmain.h"
|
||||||
|
#include "gtkmarshalers.h"
|
||||||
#include "gtkorientable.h"
|
#include "gtkorientable.h"
|
||||||
#include "gtkhbox.h"
|
#include "gtkprivate.h"
|
||||||
|
#include "gtkscale.h"
|
||||||
|
#include "gtkscalebutton.h"
|
||||||
|
#include "gtkstock.h"
|
||||||
#include "gtkvbox.h"
|
#include "gtkvbox.h"
|
||||||
#include "gtkwindow.h"
|
#include "gtkwindow.h"
|
||||||
#include "gtkmarshalers.h"
|
|
||||||
#include "gtkstock.h"
|
|
||||||
#include "gtkprivate.h"
|
|
||||||
#include "gtkscalebutton.h"
|
|
||||||
|
|
||||||
|
#include "gtkintl.h"
|
||||||
#include "gtkalias.h"
|
#include "gtkalias.h"
|
||||||
|
|
||||||
#define SCALE_SIZE 100
|
#define SCALE_SIZE 100
|
||||||
@ -90,6 +88,7 @@ enum
|
|||||||
struct _GtkScaleButtonPrivate
|
struct _GtkScaleButtonPrivate
|
||||||
{
|
{
|
||||||
GtkWidget *dock;
|
GtkWidget *dock;
|
||||||
|
GtkWidget *box;
|
||||||
GtkWidget *scale;
|
GtkWidget *scale;
|
||||||
GtkWidget *image;
|
GtkWidget *image;
|
||||||
|
|
||||||
@ -155,7 +154,7 @@ static void gtk_scale_button_update_icon (GtkScaleButton *button);
|
|||||||
static void gtk_scale_button_scale_value_changed(GtkRange *range);
|
static void gtk_scale_button_scale_value_changed(GtkRange *range);
|
||||||
|
|
||||||
/* see below for scale definitions */
|
/* see below for scale definitions */
|
||||||
static GtkWidget *gtk_scale_button_scale_box_new(GtkScaleButton *button);
|
static GtkWidget *gtk_scale_button_scale_new (GtkScaleButton *button);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (GtkScaleButton, gtk_scale_button, GTK_TYPE_BUTTON,
|
G_DEFINE_TYPE_WITH_CODE (GtkScaleButton, gtk_scale_button, GTK_TYPE_BUTTON,
|
||||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE,
|
G_IMPLEMENT_INTERFACE (GTK_TYPE_ORIENTABLE,
|
||||||
@ -188,6 +187,11 @@ gtk_scale_button_class_init (GtkScaleButtonClass *klass)
|
|||||||
*
|
*
|
||||||
* The orientation of the #GtkScaleButton's popup window.
|
* The orientation of the #GtkScaleButton's popup window.
|
||||||
*
|
*
|
||||||
|
* Note that since GTK+ 2.16, #GtkScaleButton implements the
|
||||||
|
* #GtkOrientable interface which has its own @orientation
|
||||||
|
* property. However we redefine the property here in order to
|
||||||
|
* override its default horizontal orientation.
|
||||||
|
*
|
||||||
* Since: 2.14
|
* Since: 2.14
|
||||||
**/
|
**/
|
||||||
g_object_class_override_property (gobject_class,
|
g_object_class_override_property (gobject_class,
|
||||||
@ -332,6 +336,7 @@ static void
|
|||||||
gtk_scale_button_init (GtkScaleButton *button)
|
gtk_scale_button_init (GtkScaleButton *button)
|
||||||
{
|
{
|
||||||
GtkScaleButtonPrivate *priv;
|
GtkScaleButtonPrivate *priv;
|
||||||
|
GtkWidget *frame;
|
||||||
|
|
||||||
button->priv = priv = GET_PRIVATE (button);
|
button->priv = priv = GET_PRIVATE (button);
|
||||||
|
|
||||||
@ -361,6 +366,15 @@ gtk_scale_button_init (GtkScaleButton *button)
|
|||||||
G_CALLBACK (cb_dock_grab_broken_event), button);
|
G_CALLBACK (cb_dock_grab_broken_event), button);
|
||||||
gtk_window_set_decorated (GTK_WINDOW (priv->dock), FALSE);
|
gtk_window_set_decorated (GTK_WINDOW (priv->dock), FALSE);
|
||||||
|
|
||||||
|
/* frame */
|
||||||
|
frame = gtk_frame_new (NULL);
|
||||||
|
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
|
||||||
|
gtk_container_add (GTK_CONTAINER (priv->dock), frame);
|
||||||
|
|
||||||
|
/* box for scale and +/- buttons */
|
||||||
|
priv->box = gtk_vbox_new (FALSE, 0);
|
||||||
|
gtk_container_add (GTK_CONTAINER (frame), priv->box);
|
||||||
|
|
||||||
/* + */
|
/* + */
|
||||||
button->plus_button = gtk_button_new_with_label ("+");
|
button->plus_button = gtk_button_new_with_label ("+");
|
||||||
gtk_button_set_relief (GTK_BUTTON (button->plus_button), GTK_RELIEF_NONE);
|
gtk_button_set_relief (GTK_BUTTON (button->plus_button), GTK_RELIEF_NONE);
|
||||||
@ -368,6 +382,7 @@ gtk_scale_button_init (GtkScaleButton *button)
|
|||||||
G_CALLBACK (cb_button_press), button);
|
G_CALLBACK (cb_button_press), button);
|
||||||
g_signal_connect (button->plus_button, "button-release-event",
|
g_signal_connect (button->plus_button, "button-release-event",
|
||||||
G_CALLBACK (cb_button_release), button);
|
G_CALLBACK (cb_button_release), button);
|
||||||
|
gtk_box_pack_start (GTK_BOX (priv->box), button->plus_button, FALSE, FALSE, 0);
|
||||||
|
|
||||||
/* - */
|
/* - */
|
||||||
button->minus_button = gtk_button_new_with_label ("-");
|
button->minus_button = gtk_button_new_with_label ("-");
|
||||||
@ -376,9 +391,14 @@ gtk_scale_button_init (GtkScaleButton *button)
|
|||||||
G_CALLBACK (cb_button_press), button);
|
G_CALLBACK (cb_button_press), button);
|
||||||
g_signal_connect (button->minus_button, "button-release-event",
|
g_signal_connect (button->minus_button, "button-release-event",
|
||||||
G_CALLBACK (cb_button_release), button);
|
G_CALLBACK (cb_button_release), button);
|
||||||
|
gtk_box_pack_end (GTK_BOX (priv->box), button->minus_button, FALSE, FALSE, 0);
|
||||||
|
|
||||||
priv->adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 100.0, 2, 20, 0));
|
priv->adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 100.0, 2, 20, 0));
|
||||||
g_object_ref_sink (priv->adjustment);
|
g_object_ref_sink (priv->adjustment);
|
||||||
|
|
||||||
|
/* the scale */
|
||||||
|
priv->scale = gtk_scale_button_scale_new (button);
|
||||||
|
gtk_container_add (GTK_CONTAINER (priv->box), priv->scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GObject *
|
static GObject *
|
||||||
@ -388,7 +408,6 @@ gtk_scale_button_constructor (GType type,
|
|||||||
{
|
{
|
||||||
GObject *object;
|
GObject *object;
|
||||||
GtkScaleButton *button;
|
GtkScaleButton *button;
|
||||||
GtkWidget *frame, *box;
|
|
||||||
GtkScaleButtonPrivate *priv;
|
GtkScaleButtonPrivate *priv;
|
||||||
|
|
||||||
object = G_OBJECT_CLASS (gtk_scale_button_parent_class)->constructor (type, n_construct_properties, construct_params);
|
object = G_OBJECT_CLASS (gtk_scale_button_parent_class)->constructor (type, n_construct_properties, construct_params);
|
||||||
@ -397,15 +416,6 @@ gtk_scale_button_constructor (GType type,
|
|||||||
|
|
||||||
priv = button->priv;
|
priv = button->priv;
|
||||||
|
|
||||||
/* frame */
|
|
||||||
frame = gtk_frame_new (NULL);
|
|
||||||
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
|
|
||||||
gtk_container_add (GTK_CONTAINER (priv->dock), frame);
|
|
||||||
|
|
||||||
/* box with scale and +/- buttons */
|
|
||||||
box = gtk_scale_button_scale_box_new (button);
|
|
||||||
gtk_container_add (GTK_CONTAINER (frame), box);
|
|
||||||
|
|
||||||
/* set button text and size */
|
/* set button text and size */
|
||||||
priv->size = GTK_ICON_SIZE_SMALL_TOOLBAR;
|
priv->size = GTK_ICON_SIZE_SMALL_TOOLBAR;
|
||||||
gtk_scale_button_update_icon (button);
|
gtk_scale_button_update_icon (button);
|
||||||
@ -739,30 +749,41 @@ gtk_scale_button_set_orientation (GtkScaleButton *button,
|
|||||||
{
|
{
|
||||||
priv->orientation = orientation;
|
priv->orientation = orientation;
|
||||||
|
|
||||||
if (priv->scale)
|
gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->box),
|
||||||
|
orientation);
|
||||||
|
gtk_container_child_set (GTK_CONTAINER (priv->box),
|
||||||
|
button->plus_button,
|
||||||
|
"pack-type",
|
||||||
|
orientation == GTK_ORIENTATION_VERTICAL ?
|
||||||
|
GTK_PACK_START : GTK_PACK_END,
|
||||||
|
NULL);
|
||||||
|
gtk_container_child_set (GTK_CONTAINER (priv->box),
|
||||||
|
button->minus_button,
|
||||||
|
"pack-type",
|
||||||
|
orientation == GTK_ORIENTATION_VERTICAL ?
|
||||||
|
GTK_PACK_END : GTK_PACK_START,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->scale),
|
||||||
|
orientation);
|
||||||
|
|
||||||
|
if (orientation == GTK_ORIENTATION_VERTICAL)
|
||||||
{
|
{
|
||||||
GtkWidget *box = priv->scale->parent;
|
gtk_widget_set_size_request (GTK_WIDGET (priv->scale),
|
||||||
GtkWidget *frame = box->parent;
|
-1, SCALE_SIZE);
|
||||||
|
gtk_range_set_inverted (GTK_RANGE (priv->scale), TRUE);
|
||||||
g_object_ref (button->plus_button);
|
|
||||||
g_object_ref (button->minus_button);
|
|
||||||
|
|
||||||
gtk_container_remove (GTK_CONTAINER (box), button->plus_button);
|
|
||||||
gtk_container_remove (GTK_CONTAINER (box), button->minus_button);
|
|
||||||
gtk_container_remove (GTK_CONTAINER (box), priv->scale);
|
|
||||||
gtk_container_remove (GTK_CONTAINER (frame), box);
|
|
||||||
|
|
||||||
box = gtk_scale_button_scale_box_new (button);
|
|
||||||
gtk_container_add (GTK_CONTAINER (frame), box);
|
|
||||||
|
|
||||||
/* FIXME: without this, the popup window appears as a square
|
|
||||||
* after changing the orientation
|
|
||||||
*/
|
|
||||||
gtk_window_resize (GTK_WINDOW (priv->dock), 1, 1);
|
|
||||||
|
|
||||||
g_object_unref (button->plus_button);
|
|
||||||
g_object_unref (button->minus_button);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gtk_widget_set_size_request (GTK_WIDGET (priv->scale),
|
||||||
|
SCALE_SIZE, -1);
|
||||||
|
gtk_range_set_inverted (GTK_RANGE (priv->scale), FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FIXME: without this, the popup window appears as a square
|
||||||
|
* after changing the orientation
|
||||||
|
*/
|
||||||
|
gtk_window_resize (GTK_WINDOW (priv->dock), 1, 1);
|
||||||
|
|
||||||
g_object_notify (G_OBJECT (button), "orientation");
|
g_object_notify (G_OBJECT (button), "orientation");
|
||||||
}
|
}
|
||||||
@ -1328,43 +1349,30 @@ cb_scale_grab_notify (GtkWidget *widget,
|
|||||||
* Scale stuff.
|
* Scale stuff.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define GTK_TYPE_SCALE_BUTTON_VSCALE (_gtk_scale_button_vscale_get_type ())
|
#define GTK_TYPE_SCALE_BUTTON_SCALE (_gtk_scale_button_scale_get_type ())
|
||||||
#define GTK_SCALE_BUTTON_VSCALE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCALE_BUTTON_VSCALE, GtkScaleButtonVScale))
|
#define GTK_SCALE_BUTTON_SCALE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCALE_BUTTON_SCALE, GtkScaleButtonScale))
|
||||||
#define GTK_IS_SCALE_BUTTON_VSCALE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCALE_BUTTON_VSCALE))
|
#define GTK_IS_SCALE_BUTTON_SCALE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCALE_BUTTON_SCALE))
|
||||||
|
|
||||||
typedef struct _GtkScaleButtonVScale {
|
typedef struct _GtkScaleButtonScale
|
||||||
GtkVScale parent;
|
{
|
||||||
|
GtkScale parent_instance;
|
||||||
GtkScaleButton *button;
|
GtkScaleButton *button;
|
||||||
} GtkScaleButtonVScale;
|
} GtkScaleButtonScale;
|
||||||
|
|
||||||
typedef struct _GtkScaleButtonVScaleClass {
|
typedef struct _GtkScaleButtonScaleClass
|
||||||
GtkVScaleClass parent_class;
|
{
|
||||||
} GtkScaleButtonVScaleClass;
|
GtkScaleClass parent_class;
|
||||||
|
} GtkScaleButtonScaleClass;
|
||||||
#define GTK_TYPE_SCALE_BUTTON_HSCALE (_gtk_scale_button_hscale_get_type ())
|
|
||||||
#define GTK_SCALE_BUTTON_HSCALE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SCALE_BUTTON_HSCALE, GtkScaleButtonHScale))
|
|
||||||
#define GTK_IS_SCALE_BUTTON_HSCALE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SCALE_BUTTON_HSCALE))
|
|
||||||
|
|
||||||
typedef struct _GtkScaleButtonHScale {
|
|
||||||
GtkVScale parent;
|
|
||||||
GtkScaleButton *button;
|
|
||||||
} GtkScaleButtonHScale;
|
|
||||||
|
|
||||||
typedef struct _GtkScaleButtonHScaleClass {
|
|
||||||
GtkVScaleClass parent_class;
|
|
||||||
} GtkScaleButtonHScaleClass;
|
|
||||||
|
|
||||||
static gboolean gtk_scale_button_scale_press (GtkWidget *widget,
|
static gboolean gtk_scale_button_scale_press (GtkWidget *widget,
|
||||||
GdkEventButton *event);
|
GdkEventButton *event);
|
||||||
static gboolean gtk_scale_button_scale_release (GtkWidget *widget,
|
static gboolean gtk_scale_button_scale_release (GtkWidget *widget,
|
||||||
GdkEventButton *event);
|
GdkEventButton *event);
|
||||||
|
|
||||||
G_DEFINE_TYPE (GtkScaleButtonVScale, _gtk_scale_button_vscale, GTK_TYPE_VSCALE)
|
G_DEFINE_TYPE (GtkScaleButtonScale, _gtk_scale_button_scale, GTK_TYPE_SCALE)
|
||||||
|
|
||||||
G_DEFINE_TYPE (GtkScaleButtonHScale, _gtk_scale_button_hscale, GTK_TYPE_HSCALE)
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_gtk_scale_button_vscale_class_init (GtkScaleButtonVScaleClass *klass)
|
_gtk_scale_button_scale_class_init (GtkScaleButtonScaleClass *klass)
|
||||||
{
|
{
|
||||||
GtkWidgetClass *gtkwidget_class = GTK_WIDGET_CLASS (klass);
|
GtkWidgetClass *gtkwidget_class = GTK_WIDGET_CLASS (klass);
|
||||||
GtkRangeClass *gtkrange_class = GTK_RANGE_CLASS (klass);
|
GtkRangeClass *gtkrange_class = GTK_RANGE_CLASS (klass);
|
||||||
@ -1375,121 +1383,62 @@ _gtk_scale_button_vscale_class_init (GtkScaleButtonVScaleClass *klass)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_gtk_scale_button_hscale_class_init (GtkScaleButtonHScaleClass *klass)
|
_gtk_scale_button_scale_init (GtkScaleButtonScale *scale)
|
||||||
{
|
|
||||||
GtkWidgetClass *gtkwidget_class = GTK_WIDGET_CLASS (klass);
|
|
||||||
GtkRangeClass *gtkrange_class = GTK_RANGE_CLASS (klass);
|
|
||||||
|
|
||||||
gtkwidget_class->button_press_event = gtk_scale_button_scale_press;
|
|
||||||
gtkwidget_class->button_release_event = gtk_scale_button_scale_release;
|
|
||||||
gtkrange_class->value_changed = gtk_scale_button_scale_value_changed;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_gtk_scale_button_vscale_init (GtkScaleButtonVScale *scale)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_gtk_scale_button_hscale_init (GtkScaleButtonHScale *scale)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
gtk_scale_button_scale_box_new (GtkScaleButton *button)
|
gtk_scale_button_scale_new (GtkScaleButton *button)
|
||||||
{
|
{
|
||||||
GtkScaleButtonPrivate *priv = button->priv;
|
GtkScaleButtonPrivate *priv = button->priv;
|
||||||
GtkScaleButtonVScale *scale;
|
GtkScaleButtonScale *scale;
|
||||||
GtkWidget *box;
|
|
||||||
|
scale = g_object_new (GTK_TYPE_SCALE_BUTTON_SCALE,
|
||||||
|
"orientation", priv->orientation,
|
||||||
|
"adjustment", priv->adjustment,
|
||||||
|
"draw-value", FALSE,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
scale->button = button;
|
||||||
|
|
||||||
|
g_signal_connect (scale, "grab-notify",
|
||||||
|
G_CALLBACK (cb_scale_grab_notify), button);
|
||||||
|
|
||||||
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
|
if (priv->orientation == GTK_ORIENTATION_VERTICAL)
|
||||||
{
|
{
|
||||||
box = gtk_vbox_new (FALSE, 0);
|
gtk_widget_set_size_request (GTK_WIDGET (scale), -1, SCALE_SIZE);
|
||||||
|
gtk_range_set_inverted (GTK_RANGE (scale), TRUE);
|
||||||
scale = g_object_new (GTK_TYPE_SCALE_BUTTON_VSCALE, NULL);
|
|
||||||
priv->scale = GTK_WIDGET (scale);
|
|
||||||
|
|
||||||
gtk_widget_set_size_request (priv->scale, -1, SCALE_SIZE);
|
|
||||||
gtk_range_set_inverted (GTK_RANGE (priv->scale), TRUE);
|
|
||||||
|
|
||||||
gtk_box_pack_start (GTK_BOX (box), button->plus_button, TRUE, FALSE, 0);
|
|
||||||
gtk_box_pack_start (GTK_BOX (box), priv->scale, TRUE, FALSE, 0);
|
|
||||||
gtk_box_pack_start (GTK_BOX (box), button->minus_button, TRUE, FALSE, 0);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
box = gtk_hbox_new (FALSE, 0);
|
gtk_widget_set_size_request (GTK_WIDGET (scale), SCALE_SIZE, -1);
|
||||||
|
gtk_range_set_inverted (GTK_RANGE (scale), FALSE);
|
||||||
scale = g_object_new (GTK_TYPE_SCALE_BUTTON_HSCALE, NULL);
|
|
||||||
priv->scale = GTK_WIDGET (scale);
|
|
||||||
|
|
||||||
gtk_widget_set_size_request (priv->scale, SCALE_SIZE, -1);
|
|
||||||
|
|
||||||
gtk_box_pack_start (GTK_BOX (box), button->minus_button, TRUE, FALSE, 0);
|
|
||||||
gtk_box_pack_start (GTK_BOX (box), priv->scale, TRUE, FALSE, 0);
|
|
||||||
gtk_box_pack_start (GTK_BOX (box), button->plus_button, TRUE, FALSE, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_scale_set_draw_value (GTK_SCALE (priv->scale), FALSE);
|
return GTK_WIDGET (scale);
|
||||||
gtk_range_set_adjustment (GTK_RANGE (scale),
|
|
||||||
GTK_ADJUSTMENT (priv->adjustment));
|
|
||||||
scale->button = button;
|
|
||||||
|
|
||||||
g_signal_connect (priv->scale, "grab-notify",
|
|
||||||
G_CALLBACK (cb_scale_grab_notify), button);
|
|
||||||
|
|
||||||
/* FIXME: without this, the popup window appears as a square
|
|
||||||
* after changing the orientation
|
|
||||||
*/
|
|
||||||
gtk_window_resize (GTK_WINDOW (priv->dock), 1, 1);
|
|
||||||
|
|
||||||
return box;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gtk_scale_button_scale_press (GtkWidget *widget,
|
gtk_scale_button_scale_press (GtkWidget *widget,
|
||||||
GdkEventButton *event)
|
GdkEventButton *event)
|
||||||
{
|
{
|
||||||
GtkScaleButtonPrivate *priv;
|
GtkScaleButtonPrivate *priv = GTK_SCALE_BUTTON_SCALE (widget)->button->priv;
|
||||||
GtkWidgetClass *widget_class;
|
|
||||||
|
|
||||||
if (GTK_IS_SCALE_BUTTON_VSCALE (widget))
|
|
||||||
{
|
|
||||||
priv = GTK_SCALE_BUTTON_VSCALE (widget)->button->priv;
|
|
||||||
widget_class = GTK_WIDGET_CLASS (_gtk_scale_button_vscale_parent_class);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
priv = GTK_SCALE_BUTTON_HSCALE (widget)->button->priv;
|
|
||||||
widget_class = GTK_WIDGET_CLASS (_gtk_scale_button_hscale_parent_class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* the scale will grab input; if we have input grabbed, all goes
|
/* the scale will grab input; if we have input grabbed, all goes
|
||||||
* horribly wrong, so let's not do that. */
|
* horribly wrong, so let's not do that.
|
||||||
|
*/
|
||||||
gtk_grab_remove (priv->dock);
|
gtk_grab_remove (priv->dock);
|
||||||
|
|
||||||
return widget_class->button_press_event (widget, event);
|
return GTK_WIDGET_CLASS (_gtk_scale_button_scale_parent_class)->button_press_event (widget, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gtk_scale_button_scale_release (GtkWidget *widget,
|
gtk_scale_button_scale_release (GtkWidget *widget,
|
||||||
GdkEventButton *event)
|
GdkEventButton *event)
|
||||||
{
|
{
|
||||||
GtkScaleButton *button;
|
GtkScaleButton *button = GTK_SCALE_BUTTON_SCALE (widget)->button;
|
||||||
GtkWidgetClass *widget_class;
|
|
||||||
gboolean res;
|
gboolean res;
|
||||||
|
|
||||||
if (GTK_IS_SCALE_BUTTON_VSCALE (widget))
|
|
||||||
{
|
|
||||||
button = GTK_SCALE_BUTTON_VSCALE (widget)->button;
|
|
||||||
widget_class = GTK_WIDGET_CLASS (_gtk_scale_button_vscale_parent_class);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
button = GTK_SCALE_BUTTON_HSCALE (widget)->button;
|
|
||||||
widget_class = GTK_WIDGET_CLASS (_gtk_scale_button_hscale_parent_class);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (button->priv->timeout)
|
if (button->priv->timeout)
|
||||||
{
|
{
|
||||||
/* if we did a quick click, leave the window open; else, hide it */
|
/* if we did a quick click, leave the window open; else, hide it */
|
||||||
@ -1497,7 +1446,7 @@ gtk_scale_button_scale_release (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
|
|
||||||
gtk_scale_button_release_grab (button, event);
|
gtk_scale_button_release_grab (button, event);
|
||||||
widget_class->button_release_event (widget, event);
|
GTK_WIDGET_CLASS (_gtk_scale_button_scale_parent_class)->button_release_event (widget, event);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1505,7 +1454,7 @@ gtk_scale_button_scale_release (GtkWidget *widget,
|
|||||||
button->priv->timeout = FALSE;
|
button->priv->timeout = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = widget_class->button_release_event (widget, event);
|
res = GTK_WIDGET_CLASS (_gtk_scale_button_scale_parent_class)->button_release_event (widget, event);
|
||||||
|
|
||||||
/* the scale will release input; right after that, we *have to* grab
|
/* the scale will release input; right after that, we *have to* grab
|
||||||
* it back so we can catch out-of-scale clicks and hide the popup,
|
* it back so we can catch out-of-scale clicks and hide the popup,
|
||||||
@ -1597,14 +1546,9 @@ gtk_scale_button_update_icon (GtkScaleButton *button)
|
|||||||
static void
|
static void
|
||||||
gtk_scale_button_scale_value_changed (GtkRange *range)
|
gtk_scale_button_scale_value_changed (GtkRange *range)
|
||||||
{
|
{
|
||||||
GtkScaleButton *button;
|
GtkScaleButton *button = GTK_SCALE_BUTTON_SCALE (range)->button;
|
||||||
gdouble value;
|
gdouble value;
|
||||||
|
|
||||||
if (GTK_IS_SCALE_BUTTON_VSCALE (range))
|
|
||||||
button = GTK_SCALE_BUTTON_VSCALE (range)->button;
|
|
||||||
else
|
|
||||||
button = GTK_SCALE_BUTTON_HSCALE (range)->button;
|
|
||||||
|
|
||||||
value = gtk_range_get_value (range);
|
value = gtk_range_get_value (range);
|
||||||
|
|
||||||
gtk_scale_button_update_icon (button);
|
gtk_scale_button_update_icon (button);
|
||||||
|
Loading…
Reference in New Issue
Block a user