Reworked internal structure of GcalWindow.
Removed unneeded widgets. Removed unneeded layouts managers. Added constraints to handle actors sizing. Renamed main_toolbar attribute to toolbar_actor Added searchbar_actor. Initial approach.
This commit is contained in:
+136
-86
@@ -40,7 +40,9 @@
|
|||||||
|
|
||||||
struct _GcalWindowPrivate
|
struct _GcalWindowPrivate
|
||||||
{
|
{
|
||||||
ClutterActor *main_toolbar;
|
ClutterActor *toolbar_actor;
|
||||||
|
ClutterActor *searchbar_actor;
|
||||||
|
|
||||||
ClutterActor *contents_actor;
|
ClutterActor *contents_actor;
|
||||||
ClutterActor *notebook_actor;
|
ClutterActor *notebook_actor;
|
||||||
ClutterActor *sources_actor;
|
ClutterActor *sources_actor;
|
||||||
@@ -86,6 +88,10 @@ static void gcal_window_get_property (GObject *o
|
|||||||
GValue *value,
|
GValue *value,
|
||||||
GParamSpec *pspec);
|
GParamSpec *pspec);
|
||||||
|
|
||||||
|
static void gcal_window_stage_notify_cb (ClutterActor *actor,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
static GcalManager* gcal_window_get_manager (GcalWindow *window);
|
static GcalManager* gcal_window_get_manager (GcalWindow *window);
|
||||||
|
|
||||||
static void gcal_window_set_active_view (GcalWindow *window,
|
static void gcal_window_set_active_view (GcalWindow *window,
|
||||||
@@ -95,15 +101,15 @@ static void gcal_window_set_sources_view (GcalWindow *w
|
|||||||
|
|
||||||
static void gcal_window_init_edit_dialog (GcalWindow *window);
|
static void gcal_window_init_edit_dialog (GcalWindow *window);
|
||||||
|
|
||||||
static void gcal_window_view_changed (GcalToolbar *main_toolbar,
|
static void gcal_window_view_changed (GcalToolbar *toolbar_actor,
|
||||||
GcalWindowViewType view_type,
|
GcalWindowViewType view_type,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
static void gcal_window_sources_shown (GcalToolbar *main_toolbar,
|
static void gcal_window_sources_shown (GcalToolbar *toolbar_actor,
|
||||||
gboolean visible,
|
gboolean visible,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
static void gcal_window_add_event (GcalToolbar *main_toolbar,
|
static void gcal_window_add_event (GcalToolbar *toolbar_actor,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
static void gcal_window_back_last_view (GtkWidget *widget,
|
static void gcal_window_back_last_view (GtkWidget *widget,
|
||||||
@@ -177,23 +183,25 @@ gcal_window_class_init(GcalWindowClass *klass)
|
|||||||
object_class->set_property = gcal_window_set_property;
|
object_class->set_property = gcal_window_set_property;
|
||||||
object_class->get_property = gcal_window_get_property;
|
object_class->get_property = gcal_window_get_property;
|
||||||
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (
|
||||||
PROP_ACTIVE_VIEW,
|
object_class,
|
||||||
g_param_spec_enum ("active-view",
|
PROP_ACTIVE_VIEW,
|
||||||
"Active View",
|
g_param_spec_enum ("active-view",
|
||||||
"The active view, eg: month, week, etc.",
|
"Active View",
|
||||||
GCAL_WINDOW_VIEW_TYPE,
|
"The active view, eg: month, week, etc.",
|
||||||
GCAL_WINDOW_VIEW_MONTH,
|
GCAL_WINDOW_VIEW_TYPE,
|
||||||
G_PARAM_READWRITE));
|
GCAL_WINDOW_VIEW_MONTH,
|
||||||
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
g_object_class_install_property (object_class,
|
g_object_class_install_property (
|
||||||
PROP_ACTIVE_DATE,
|
object_class,
|
||||||
g_param_spec_boxed ("active-date",
|
PROP_ACTIVE_DATE,
|
||||||
"Date",
|
g_param_spec_boxed ("active-date",
|
||||||
"The active/selected date",
|
"Date",
|
||||||
ICAL_TIME_TYPE,
|
"The active/selected date",
|
||||||
G_PARAM_CONSTRUCT |
|
ICAL_TIME_TYPE,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_CONSTRUCT |
|
||||||
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
g_type_class_add_private((gpointer)klass, sizeof(GcalWindowPrivate));
|
g_type_class_add_private((gpointer)klass, sizeof(GcalWindowPrivate));
|
||||||
}
|
}
|
||||||
@@ -220,12 +228,8 @@ gcal_window_constructed (GObject *object)
|
|||||||
|
|
||||||
GtkWidget *embed;
|
GtkWidget *embed;
|
||||||
ClutterActor *stage;
|
ClutterActor *stage;
|
||||||
ClutterActor *base;
|
|
||||||
ClutterLayoutManager *base_layout_manager;
|
|
||||||
ClutterActor *body_actor;
|
|
||||||
ClutterLayoutManager *body_layout_manager;
|
|
||||||
ClutterLayoutManager *contents_layout_manager;
|
|
||||||
GtkWidget *holder;
|
GtkWidget *holder;
|
||||||
|
GtkWidget *entry;
|
||||||
|
|
||||||
GtkStyleContext *context;
|
GtkStyleContext *context;
|
||||||
|
|
||||||
@@ -244,57 +248,80 @@ gcal_window_constructed (GObject *object)
|
|||||||
gtk_container_add (GTK_CONTAINER (object), embed);
|
gtk_container_add (GTK_CONTAINER (object), embed);
|
||||||
stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (embed));
|
stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (embed));
|
||||||
|
|
||||||
/* base */
|
/* toolbar_actor */
|
||||||
base_layout_manager = clutter_box_layout_new ();
|
priv->toolbar_actor = gcal_toolbar_new ();
|
||||||
clutter_box_layout_set_orientation (CLUTTER_BOX_LAYOUT (base_layout_manager),
|
clutter_actor_add_child (stage, priv->toolbar_actor);
|
||||||
CLUTTER_ORIENTATION_VERTICAL);
|
clutter_actor_set_position (priv->toolbar_actor, 0, 0);
|
||||||
base = clutter_actor_new ();
|
clutter_actor_add_constraint_with_name (
|
||||||
clutter_actor_set_layout_manager (base, base_layout_manager);
|
priv->toolbar_actor,
|
||||||
clutter_actor_add_constraint (base,
|
"width-bind",
|
||||||
clutter_bind_constraint_new (stage,
|
clutter_bind_constraint_new (stage,
|
||||||
CLUTTER_BIND_SIZE,
|
CLUTTER_BIND_WIDTH,
|
||||||
0));
|
0.0));
|
||||||
clutter_actor_add_child (stage, base);
|
|
||||||
|
|
||||||
/* body_actor */
|
/* searchbar_actor */
|
||||||
body_layout_manager = clutter_box_layout_new ();
|
holder = gtk_grid_new ();
|
||||||
clutter_box_layout_set_orientation (CLUTTER_BOX_LAYOUT (body_layout_manager),
|
entry = gtk_search_entry_new ();
|
||||||
CLUTTER_ORIENTATION_VERTICAL);
|
gtk_widget_set_hexpand (entry, TRUE);
|
||||||
|
gtk_widget_set_vexpand (entry, TRUE);
|
||||||
|
gtk_widget_set_halign (entry, GTK_ALIGN_CENTER);
|
||||||
|
gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
|
||||||
|
gtk_widget_set_size_request (entry, 360, -1);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (holder), 12);
|
||||||
|
gtk_container_add (GTK_CONTAINER (holder), entry);
|
||||||
|
gtk_widget_show_all (holder);
|
||||||
|
|
||||||
body_actor = clutter_actor_new ();
|
priv->searchbar_actor = gtk_clutter_actor_new_with_contents (holder);
|
||||||
clutter_actor_set_layout_manager (body_actor, body_layout_manager);
|
clutter_actor_add_child (stage, priv->searchbar_actor);
|
||||||
clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (base_layout_manager),
|
clutter_actor_set_x (priv->searchbar_actor, 0);
|
||||||
body_actor,
|
clutter_actor_add_constraint_with_name (
|
||||||
TRUE,
|
priv->searchbar_actor,
|
||||||
TRUE,
|
"width-bind",
|
||||||
TRUE,
|
clutter_bind_constraint_new (stage,
|
||||||
CLUTTER_BOX_ALIGNMENT_CENTER,
|
CLUTTER_BIND_WIDTH,
|
||||||
CLUTTER_BOX_ALIGNMENT_CENTER);
|
0.0));
|
||||||
|
clutter_actor_add_constraint_with_name (
|
||||||
/* main_toolbar */
|
priv->searchbar_actor,
|
||||||
priv->main_toolbar = gcal_toolbar_new ();
|
"height-bind",
|
||||||
clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (body_layout_manager),
|
clutter_bind_constraint_new (priv->toolbar_actor,
|
||||||
priv->main_toolbar,
|
CLUTTER_BIND_HEIGHT,
|
||||||
FALSE,
|
0.0));
|
||||||
TRUE,
|
clutter_actor_add_constraint_with_name (
|
||||||
FALSE,
|
priv->searchbar_actor,
|
||||||
CLUTTER_BOX_ALIGNMENT_START,
|
"bottom-snap",
|
||||||
CLUTTER_BOX_ALIGNMENT_START);
|
clutter_snap_constraint_new (priv->toolbar_actor,
|
||||||
|
CLUTTER_SNAP_EDGE_BOTTOM,
|
||||||
/* contents */
|
CLUTTER_SNAP_EDGE_TOP,
|
||||||
contents_layout_manager =
|
0.0));
|
||||||
clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
|
/* contents_actor */
|
||||||
CLUTTER_BIN_ALIGNMENT_CENTER);
|
|
||||||
priv->contents_actor = clutter_actor_new ();
|
priv->contents_actor = clutter_actor_new ();
|
||||||
clutter_actor_set_layout_manager (priv->contents_actor,
|
clutter_actor_set_layout_manager (
|
||||||
contents_layout_manager);
|
priv->contents_actor,
|
||||||
clutter_box_layout_pack (CLUTTER_BOX_LAYOUT (body_layout_manager),
|
clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
|
||||||
priv->contents_actor,
|
CLUTTER_BIN_ALIGNMENT_CENTER));
|
||||||
TRUE,
|
clutter_actor_set_x (priv->contents_actor, 0);
|
||||||
TRUE,
|
clutter_actor_add_constraint_with_name (
|
||||||
TRUE,
|
priv->contents_actor,
|
||||||
CLUTTER_BOX_ALIGNMENT_CENTER,
|
"width-bind",
|
||||||
CLUTTER_BOX_ALIGNMENT_CENTER);
|
clutter_bind_constraint_new (stage,
|
||||||
|
CLUTTER_BIND_WIDTH,
|
||||||
|
0.0));
|
||||||
|
clutter_actor_add_constraint_with_name (
|
||||||
|
priv->contents_actor,
|
||||||
|
"y-bind",
|
||||||
|
clutter_bind_constraint_new (
|
||||||
|
stage,
|
||||||
|
CLUTTER_BIND_Y,
|
||||||
|
0.0));
|
||||||
|
clutter_actor_add_constraint_with_name (
|
||||||
|
priv->contents_actor,
|
||||||
|
"bottom-snap",
|
||||||
|
clutter_snap_constraint_new (stage,
|
||||||
|
CLUTTER_SNAP_EDGE_BOTTOM,
|
||||||
|
CLUTTER_SNAP_EDGE_BOTTOM,
|
||||||
|
0.0));
|
||||||
|
clutter_actor_add_child (stage, priv->contents_actor);
|
||||||
|
|
||||||
|
|
||||||
/* notebook widget for holding views */
|
/* notebook widget for holding views */
|
||||||
holder = gtk_frame_new (NULL);
|
holder = gtk_frame_new (NULL);
|
||||||
@@ -385,20 +412,25 @@ gcal_window_constructed (GObject *object)
|
|||||||
clutter_actor_hide (priv->new_event_actor);
|
clutter_actor_hide (priv->new_event_actor);
|
||||||
|
|
||||||
/* signals connection/handling */
|
/* signals connection/handling */
|
||||||
g_signal_connect (priv->main_toolbar,
|
g_signal_connect (stage,
|
||||||
|
"notify::allocation",
|
||||||
|
G_CALLBACK (gcal_window_stage_notify_cb),
|
||||||
|
object);
|
||||||
|
|
||||||
|
g_signal_connect (priv->toolbar_actor,
|
||||||
"view-changed",
|
"view-changed",
|
||||||
G_CALLBACK (gcal_window_view_changed),
|
G_CALLBACK (gcal_window_view_changed),
|
||||||
object);
|
object);
|
||||||
g_signal_connect (priv->main_toolbar,
|
g_signal_connect (priv->toolbar_actor,
|
||||||
"sources-shown",
|
"sources-shown",
|
||||||
G_CALLBACK (gcal_window_sources_shown),
|
G_CALLBACK (gcal_window_sources_shown),
|
||||||
object);
|
object);
|
||||||
g_signal_connect (priv->main_toolbar,
|
g_signal_connect (priv->toolbar_actor,
|
||||||
"add-event",
|
"add-event",
|
||||||
G_CALLBACK (gcal_window_add_event),
|
G_CALLBACK (gcal_window_add_event),
|
||||||
object);
|
object);
|
||||||
|
|
||||||
g_signal_connect (priv->main_toolbar,
|
g_signal_connect (priv->toolbar_actor,
|
||||||
"back",
|
"back",
|
||||||
G_CALLBACK (gcal_window_back_last_view),
|
G_CALLBACK (gcal_window_back_last_view),
|
||||||
object);
|
object);
|
||||||
@@ -478,6 +510,24 @@ gcal_window_get_property (GObject *object,
|
|||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gcal_window_stage_notify_cb (ClutterActor *actor,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GcalWindowPrivate *priv;
|
||||||
|
ClutterConstraint *constraint;
|
||||||
|
|
||||||
|
priv = GCAL_WINDOW (user_data)->priv;
|
||||||
|
|
||||||
|
/* Updating constraints */
|
||||||
|
constraint = clutter_actor_get_constraint (priv->contents_actor,
|
||||||
|
"y-bind");
|
||||||
|
clutter_bind_constraint_set_offset (
|
||||||
|
CLUTTER_BIND_CONSTRAINT (constraint),
|
||||||
|
clutter_actor_get_height (priv->toolbar_actor));
|
||||||
|
}
|
||||||
|
|
||||||
static GcalManager*
|
static GcalManager*
|
||||||
gcal_window_get_manager (GcalWindow *window)
|
gcal_window_get_manager (GcalWindow *window)
|
||||||
{
|
{
|
||||||
@@ -658,9 +708,9 @@ gcal_window_init_edit_dialog (GcalWindow *window)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_window_view_changed (GcalToolbar *main_toolbar,
|
gcal_window_view_changed (GcalToolbar *toolbar_actor,
|
||||||
GcalWindowViewType view_type,
|
GcalWindowViewType view_type,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GcalWindowPrivate *priv;
|
GcalWindowPrivate *priv;
|
||||||
|
|
||||||
@@ -671,9 +721,9 @@ gcal_window_view_changed (GcalToolbar *main_toolbar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_window_sources_shown (GcalToolbar *main_toolbar,
|
gcal_window_sources_shown (GcalToolbar *toolbar_actor,
|
||||||
gboolean visible,
|
gboolean visible,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GcalWindowPrivate *priv;
|
GcalWindowPrivate *priv;
|
||||||
priv = GCAL_WINDOW (user_data)->priv;
|
priv = GCAL_WINDOW (user_data)->priv;
|
||||||
@@ -699,7 +749,7 @@ gcal_window_sources_shown (GcalToolbar *main_toolbar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_window_add_event (GcalToolbar *main_toolbar,
|
gcal_window_add_event (GcalToolbar *toolbar_actor,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GcalWindowPrivate *priv;
|
GcalWindowPrivate *priv;
|
||||||
@@ -725,7 +775,7 @@ gcal_window_back_last_view (GtkWidget *widget,
|
|||||||
|
|
||||||
priv = GCAL_WINDOW (user_data)->priv;
|
priv = GCAL_WINDOW (user_data)->priv;
|
||||||
|
|
||||||
gcal_toolbar_set_mode (GCAL_TOOLBAR (priv->main_toolbar),
|
gcal_toolbar_set_mode (GCAL_TOOLBAR (priv->toolbar_actor),
|
||||||
GCAL_TOOLBAR_OVERVIEW);
|
GCAL_TOOLBAR_OVERVIEW);
|
||||||
|
|
||||||
if ((activated_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook),
|
if ((activated_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook),
|
||||||
@@ -1230,7 +1280,7 @@ gcal_window_new_with_view (GcalApplication *app,
|
|||||||
G_CALLBACK (gcal_window_event_created),
|
G_CALLBACK (gcal_window_event_created),
|
||||||
win);
|
win);
|
||||||
|
|
||||||
gcal_toolbar_set_active_view (GCAL_TOOLBAR (win->priv->main_toolbar),
|
gcal_toolbar_set_active_view (GCAL_TOOLBAR (win->priv->toolbar_actor),
|
||||||
view_type);
|
view_type);
|
||||||
return GTK_WIDGET (win);
|
return GTK_WIDGET (win);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user