Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pellegrino Prevete
libhandy
Commits
75e14498
Commit
75e14498
authored
Sep 27, 2018
by
Guido Gunther
Committed by
Guido Gunther
Oct 05, 2018
Browse files
glade: Add a module so we can handle HdyHeaderGroup
parent
b0098d60
Changes
4
Hide whitespace changes
Inline
Side-by-side
glade/glade-hdy-header-group.c
0 → 100644
View file @
75e14498
/*
* Copyright (C) 2018 Purism SPC
*
* SPDX-License-Identifier: LGPL-2.1+
*
* Based on
* glade-gtk-size-group.c - GladeWidgetAdaptor for GtkSizeGroup
* Copyright (C) 2013 Tristan Van Berkom
*/
#include
"glade-hdy-header-group.h"
#include
<config.h>
#include
<glib/gi18n-lib.h>
#include
<gladeui/glade.h>
#define GLADE_TAG_HEADERGROUP_WIDGETS "headerbars"
#define GLADE_TAG_HEADERGROUP_WIDGET "headerbar"
static
void
glade_hdy_header_group_read_widgets
(
GladeWidget
*
widget
,
GladeXmlNode
*
node
)
{
GladeXmlNode
*
widgets_node
;
GladeProperty
*
property
;
gchar
*
string
=
NULL
;
if
((
widgets_node
=
glade_xml_search_child
(
node
,
GLADE_TAG_HEADERGROUP_WIDGETS
))
!=
NULL
)
{
GladeXmlNode
*
n
;
for
(
n
=
glade_xml_node_get_children
(
widgets_node
);
n
;
n
=
glade_xml_node_next
(
n
))
{
gchar
*
widget_name
,
*
tmp
;
if
(
!
glade_xml_node_verify
(
n
,
GLADE_TAG_HEADERGROUP_WIDGET
))
continue
;
widget_name
=
glade_xml_get_property_string_required
(
n
,
GLADE_TAG_NAME
,
NULL
);
if
(
string
==
NULL
)
{
string
=
widget_name
;
}
else
if
(
widget_name
!=
NULL
)
{
tmp
=
g_strdup_printf
(
"%s%s%s"
,
string
,
GPC_OBJECT_DELIMITER
,
widget_name
);
string
=
(
g_free
(
string
),
tmp
);
g_free
(
widget_name
);
}
}
}
if
(
string
)
{
property
=
glade_widget_get_property
(
widget
,
"headerbars"
);
g_assert
(
property
);
/* we must synchronize this directly after loading this project
* (i.e. lookup the actual objects after they've been parsed and
* are present).
*/
g_object_set_data_full
(
G_OBJECT
(
property
),
"glade-loaded-object"
,
string
,
g_free
);
}
}
void
glade_hdy_header_group_read_widget
(
GladeWidgetAdaptor
*
adaptor
,
GladeWidget
*
widget
,
GladeXmlNode
*
node
)
{
if
(
!
(
glade_xml_node_verify_silent
(
node
,
GLADE_XML_TAG_WIDGET
)
||
glade_xml_node_verify_silent
(
node
,
GLADE_XML_TAG_TEMPLATE
)))
return
;
/* First chain up and read in all the normal properties.. */
GWA_GET_CLASS
(
G_TYPE_OBJECT
)
->
read_widget
(
adaptor
,
widget
,
node
);
glade_hdy_header_group_read_widgets
(
widget
,
node
);
}
static
void
glade_hdy_header_group_write_widgets
(
GladeWidget
*
widget
,
GladeXmlContext
*
context
,
GladeXmlNode
*
node
)
{
GladeXmlNode
*
widgets_node
,
*
widget_node
;
GList
*
widgets
=
NULL
,
*
list
;
GladeWidget
*
awidget
;
widgets_node
=
glade_xml_node_new
(
context
,
GLADE_TAG_HEADERGROUP_WIDGETS
);
if
(
glade_widget_property_get
(
widget
,
"headerbars"
,
&
widgets
))
{
for
(
list
=
widgets
;
list
;
list
=
list
->
next
)
{
awidget
=
glade_widget_get_from_gobject
(
list
->
data
);
widget_node
=
glade_xml_node_new
(
context
,
GLADE_TAG_HEADERGROUP_WIDGET
);
glade_xml_node_append_child
(
widgets_node
,
widget_node
);
glade_xml_node_set_property_string
(
widget_node
,
GLADE_TAG_NAME
,
glade_widget_get_name
(
awidget
));
}
}
if
(
!
glade_xml_node_get_children
(
widgets_node
))
glade_xml_node_delete
(
widgets_node
);
else
glade_xml_node_append_child
(
node
,
widgets_node
);
}
void
glade_hdy_header_group_write_widget
(
GladeWidgetAdaptor
*
adaptor
,
GladeWidget
*
widget
,
GladeXmlContext
*
context
,
GladeXmlNode
*
node
)
{
if
(
!
(
glade_xml_node_verify_silent
(
node
,
GLADE_XML_TAG_WIDGET
)
||
glade_xml_node_verify_silent
(
node
,
GLADE_XML_TAG_TEMPLATE
)))
return
;
/* First chain up and read in all the normal properties.. */
GWA_GET_CLASS
(
G_TYPE_OBJECT
)
->
write_widget
(
adaptor
,
widget
,
context
,
node
);
glade_hdy_header_group_write_widgets
(
widget
,
context
,
node
);
}
void
glade_hdy_header_group_set_property
(
GladeWidgetAdaptor
*
adaptor
,
GObject
*
object
,
const
gchar
*
property_name
,
const
GValue
*
value
)
{
if
(
!
strcmp
(
property_name
,
"headerbars"
))
{
GSList
*
sg_widgets
,
*
slist
;
GList
*
widgets
,
*
list
;
/* remove old widgets */
if
((
sg_widgets
=
hdy_header_group_get_header_bars
(
HDY_HEADER_GROUP
(
object
)))
!=
NULL
)
{
/* copy since we are modifying an internal list */
sg_widgets
=
g_slist_copy
(
sg_widgets
);
for
(
slist
=
sg_widgets
;
slist
;
slist
=
slist
->
next
)
hdy_header_group_remove_header_bar
(
HDY_HEADER_GROUP
(
object
),
GTK_HEADER_BAR
(
slist
->
data
));
g_slist_free
(
sg_widgets
);
}
/* add new widgets */
if
((
widgets
=
g_value_get_boxed
(
value
))
!=
NULL
)
{
for
(
list
=
widgets
;
list
;
list
=
list
->
next
)
hdy_header_group_add_header_bar
(
HDY_HEADER_GROUP
(
object
),
GTK_HEADER_BAR
(
list
->
data
));
}
}
else
{
GWA_GET_CLASS
(
G_TYPE_OBJECT
)
->
set_property
(
adaptor
,
object
,
property_name
,
value
);
}
}
glade/glade-hdy-header-group.h
0 → 100644
View file @
75e14498
/*
* Copyright (C) 2018 Purism SPC
*
* SPDX-License-Identifier: LGPL-2.1+
*/
#pragma once
#include
<gladeui/glade.h>
#define HANDY_USE_UNSTABLE_API
#include
<handy.h>
void
glade_hdy_header_group_set_property
(
GladeWidgetAdaptor
*
adaptor
,
GObject
*
object
,
const
gchar
*
property_name
,
const
GValue
*
value
);
void
glade_hdy_header_group_write_widget
(
GladeWidgetAdaptor
*
adaptor
,
GladeWidget
*
widget
,
GladeXmlContext
*
context
,
GladeXmlNode
*
node
);
void
glade_hdy_header_group_read_widget
(
GladeWidgetAdaptor
*
adaptor
,
GladeWidget
*
widget
,
GladeXmlNode
*
node
);
glade/meson.build
0 → 100644
View file @
75e14498
if get_option('glade_catalog')
gladeui_dep = dependency('gladeui-2.0')
module_dir = gladeui_dep.get_pkgconfig_variable('moduledir')
libglade_hdy_sources = [
'glade-hdy-header-group.c',
]
libglade_hdy_deps = [
libhandy_dep,
gladeui_dep,
]
libglade_hdy_args = []
libglade_hdy = shared_library(
'glade-handy',
libglade_hdy_sources,
c_args: libglade_hdy_args,
dependencies: libglade_hdy_deps,
include_directories: [ root_inc, src_inc ],
install: true,
install_dir: module_dir,
)
endif
meson.build
View file @
75e14498
...
...
@@ -118,6 +118,7 @@ subdir('examples')
subdir('tests')
subdir('doc')
subdir('data')
subdir('glade')
run_data = configuration_data()
run_data.set('ABS_BUILDDIR', meson.current_build_dir())
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment