[gedit] Use css stylesheet file instead of inline styles
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] Use css stylesheet file instead of inline styles
- Date: Tue, 12 Apr 2011 21:53:58 +0000 (UTC)
commit c2fbbed25740d45426b9de17d9a2aeec6c350152
Author: Jesse van den Kieboom <jessevdk gnome org>
Date: Tue Apr 12 23:53:43 2011 +0200
Use css stylesheet file instead of inline styles
data/Makefile.am | 6 +++-
data/gedit.css | 19 +++++++++++
gedit/gedit-close-button.c | 29 +----------------
gedit/gedit-close-button.h | 3 --
gedit/gedit-multi-notebook.c | 68 +++++++++++++++++++--------------------
gedit/gedit-multi-notebook.h | 3 --
gedit/gedit-notebook.c | 70 ----------------------------------------
gedit/gedit-notebook.h | 3 --
gedit/gedit-status-combo-box.c | 34 +-------------------
gedit/gedit-status-combo-box.h | 2 -
gedit/gedit-window.c | 14 +++++++-
gedit/gedit.c | 34 +++++++++++++++++++
12 files changed, 105 insertions(+), 180 deletions(-)
---
diff --git a/data/Makefile.am b/data/Makefile.am
index 4d388a3..ea1a1c6 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -29,13 +29,17 @@ gsettings_SCHEMAS = org.gnome.gedit.gschema.xml
convertdir = $(datadir)/GConf/gsettings
convert_DATA = gedit.convert
+cssdir = $(datadir)/gedit/css
+css_DATA = gedit.css
+
EXTRA_DIST = \
$(desktop_in_files) \
$(service_in_files) \
$(man_MANS) \
gedit.pc.in \
org.gnome.gedit.gschema.xml.in.in \
- gedit.convert
+ gedit.convert \
+ gedit.css
CLEANFILES = \
$(desktop_DATA) \
diff --git a/data/gedit.css b/data/gedit.css
new file mode 100644
index 0000000..ff74f85
--- /dev/null
+++ b/data/gedit.css
@@ -0,0 +1,19 @@
+/* Make buttons as small as possible */
+GeditStatusComboBox GtkButton, GeditCloseButton {
+ -GtkButton-default-border : 0;
+ -GtkButton-default-outside-border : 0;
+ -GtkButton-inner-border: 0;
+ -GtkWidget-focus-line-width : 0;
+ -GtkWidget-focus-padding : 0;
+ padding: 0;
+}
+
+/* Apply style to the last notebook when the main window is in fullscreen mode
+ (is set both when in maximized and in fullscreen mode), to remove the
+ right padding from the notebook */
+GeditWindow.fullscreen GeditMultiNotebook GeditNotebook.last {
+ /* Note that top/bottom/left padding is hard coded for now to 2px
+ because we can't set only the right padding. See:
+ https://bugzilla.gnome.org/show_bug.cgi?id=647605 */
+ padding: 2px 0 2px 2px;
+}
diff --git a/gedit/gedit-close-button.c b/gedit/gedit-close-button.c
index 6a9021a..d0cdbce 100644
--- a/gedit/gedit-close-button.c
+++ b/gedit/gedit-close-button.c
@@ -22,37 +22,16 @@
#include "gedit-close-button.h"
-struct _GeditCloseButtonClassPrivate
-{
- GtkCssProvider *css;
-};
-
-G_DEFINE_TYPE_WITH_CODE (GeditCloseButton, gedit_close_button, GTK_TYPE_BUTTON,
- g_type_add_class_private (g_define_type_id, sizeof (GeditCloseButtonClassPrivate)))
+G_DEFINE_TYPE (GeditCloseButton, gedit_close_button, GTK_TYPE_BUTTON)
static void
gedit_close_button_class_init (GeditCloseButtonClass *klass)
{
- static const gchar button_style[] =
- "* {\n"
- "-GtkButton-default-border : 0;\n"
- "-GtkButton-default-outside-border : 0;\n"
- "-GtkButton-inner-border: 0;\n"
- "-GtkWidget-focus-line-width : 0;\n"
- "-GtkWidget-focus-padding : 0;\n"
- "padding: 0;\n"
- "}";
-
- klass->priv = G_TYPE_CLASS_GET_PRIVATE (klass, GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButtonClassPrivate);
-
- klass->priv->css = gtk_css_provider_new ();
- gtk_css_provider_load_from_data (klass->priv->css, button_style, -1, NULL);
}
static void
gedit_close_button_init (GeditCloseButton *button)
{
- GtkStyleContext *context;
GtkWidget *image;
image = gtk_image_new_from_stock (GTK_STOCK_CLOSE,
@@ -60,12 +39,6 @@ gedit_close_button_init (GeditCloseButton *button)
gtk_widget_show (image);
gtk_container_add (GTK_CONTAINER (button), image);
-
- /* make it small */
- context = gtk_widget_get_style_context (GTK_WIDGET (button));
- gtk_style_context_add_provider (context,
- GTK_STYLE_PROVIDER (GEDIT_CLOSE_BUTTON_GET_CLASS (button)->priv->css),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
GtkWidget *
diff --git a/gedit/gedit-close-button.h b/gedit/gedit-close-button.h
index 791a730..3ac444f 100644
--- a/gedit/gedit-close-button.h
+++ b/gedit/gedit-close-button.h
@@ -36,7 +36,6 @@ G_BEGIN_DECLS
typedef struct _GeditCloseButton GeditCloseButton;
typedef struct _GeditCloseButtonClass GeditCloseButtonClass;
-typedef struct _GeditCloseButtonClassPrivate GeditCloseButtonClassPrivate;
struct _GeditCloseButton
{
@@ -46,8 +45,6 @@ struct _GeditCloseButton
struct _GeditCloseButtonClass
{
GtkButtonClass parent_class;
-
- GeditCloseButtonClassPrivate *priv;
};
GType gedit_close_button_get_type (void) G_GNUC_CONST;
diff --git a/gedit/gedit-multi-notebook.c b/gedit/gedit-multi-notebook.c
index 9efddc5..83a4f46 100644
--- a/gedit/gedit-multi-notebook.c
+++ b/gedit/gedit-multi-notebook.c
@@ -36,7 +36,6 @@ struct _GeditMultiNotebookPrivate
GeditTab *active_tab;
guint removing_notebook : 1;
- guint collapse : 1;
};
enum
@@ -450,6 +449,12 @@ add_notebook (GeditMultiNotebook *mnb,
mnb->priv->notebooks = g_list_append (mnb->priv->notebooks,
notebook);
+
+ gtk_style_context_add_class (gtk_widget_get_style_context (notebook),
+ "first");
+
+ gtk_style_context_add_class (gtk_widget_get_style_context (notebook),
+ "last");
}
else
{
@@ -458,7 +463,6 @@ add_notebook (GeditMultiNotebook *mnb,
GtkAllocation allocation;
GtkWidget *active_notebook = mnb->priv->active_notebook;
gint active_nb_pos;
- gboolean collapse_new_notebook = FALSE;
paned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
gtk_widget_show (paned);
@@ -472,6 +476,16 @@ add_notebook (GeditMultiNotebook *mnb,
gtk_container_remove (GTK_CONTAINER (parent), active_notebook);
gtk_container_add (GTK_CONTAINER (parent), paned);
+ /* check if we need to uncollapse the active notebook */
+ if (active_notebook == g_list_last (mnb->priv->notebooks)->data)
+ {
+ gtk_style_context_remove_class (gtk_widget_get_style_context (active_notebook),
+ "last");
+
+ gtk_style_context_add_class (gtk_widget_get_style_context (notebook),
+ "last");
+ }
+
gtk_paned_pack1 (GTK_PANED (paned), active_notebook, TRUE, FALSE);
g_object_unref (active_notebook);
@@ -481,26 +495,11 @@ add_notebook (GeditMultiNotebook *mnb,
gtk_paned_set_position (GTK_PANED (paned),
allocation.width / 2);
- /* check if we need to uncollapse the active notebook */
- if (active_notebook == g_list_last (mnb->priv->notebooks)->data &&
- mnb->priv->collapse)
- {
- collapse_new_notebook = TRUE;
- gedit_notebook_collapse_border (GEDIT_NOTEBOOK (active_notebook),
- FALSE);
- }
-
active_nb_pos = g_list_index (mnb->priv->notebooks,
active_notebook);
mnb->priv->notebooks = g_list_insert (mnb->priv->notebooks,
notebook,
active_nb_pos + 1);
-
- if (collapse_new_notebook)
- {
- gedit_notebook_collapse_border (GEDIT_NOTEBOOK (notebook),
- TRUE);
- }
}
gtk_widget_show (notebook);
@@ -532,14 +531,25 @@ remove_notebook (GeditMultiNotebook *mnb,
if (current->next != NULL)
{
new_notebook = GTK_WIDGET (current->next->data);
+
+ if (current->prev == NULL)
+ {
+ gtk_style_context_add_class (gtk_widget_get_style_context (new_notebook),
+ "first");
+ }
}
else
{
new_notebook = GTK_WIDGET (mnb->priv->notebooks->data);
- /* we must check if we need to collapse the new last notebook */
- gedit_notebook_collapse_border (GEDIT_NOTEBOOK (current->prev->data),
- mnb->priv->collapse);
+ gtk_style_context_add_class (gtk_widget_get_style_context (current->prev->data),
+ "last");
+ }
+
+ if (current->prev == NULL)
+ {
+ gtk_style_context_remove_class (gtk_widget_get_style_context (notebook),
+ "first");
}
parent = gtk_widget_get_parent (notebook);
@@ -574,6 +584,9 @@ remove_notebook (GeditMultiNotebook *mnb,
g_object_unref (children->data);
g_list_free (children);
+ gtk_style_context_remove_region (gtk_widget_get_style_context (notebook),
+ "notebook");
+
disconnect_notebook_signals (mnb, notebook);
g_signal_emit (G_OBJECT (mnb), signals[NOTEBOOK_REMOVED], 0, notebook);
@@ -906,21 +919,6 @@ gedit_multi_notebook_next_notebook (GeditMultiNotebook *mnb)
}
void
-gedit_multi_notebook_collapse_notebook_border (GeditMultiNotebook *mnb,
- gboolean collapse)
-{
- GeditNotebook *notebook;
-
- g_return_if_fail (GEDIT_IS_MULTI_NOTEBOOK (mnb));
-
- mnb->priv->collapse = (collapse != FALSE);
-
- notebook = GEDIT_NOTEBOOK (g_list_last (mnb->priv->notebooks)->data);
-
- gedit_notebook_collapse_border (notebook, collapse);
-}
-
-void
gedit_multi_notebook_foreach_notebook (GeditMultiNotebook *mnb,
GtkCallback callback,
gpointer callback_data)
diff --git a/gedit/gedit-multi-notebook.h b/gedit/gedit-multi-notebook.h
index 98ce8e4..1ee87b5 100644
--- a/gedit/gedit-multi-notebook.h
+++ b/gedit/gedit-multi-notebook.h
@@ -123,9 +123,6 @@ void gedit_multi_notebook_remove_active_notebook (GeditMultiNotebook *mnb);
void gedit_multi_notebook_previous_notebook (GeditMultiNotebook *mnb);
void gedit_multi_notebook_next_notebook (GeditMultiNotebook *mnb);
-void gedit_multi_notebook_collapse_notebook_border (GeditMultiNotebook *mnb,
- gboolean collapse);
-
void gedit_multi_notebook_foreach_notebook (GeditMultiNotebook *mnb,
GtkCallback callback,
gpointer callback_data);
diff --git a/gedit/gedit-notebook.c b/gedit/gedit-notebook.c
index c61fa63..64117ea 100644
--- a/gedit/gedit-notebook.c
+++ b/gedit/gedit-notebook.c
@@ -62,8 +62,6 @@ struct _GeditNotebookPrivate
GeditNotebookShowTabsModeType show_tabs_mode;
- GtkCssProvider *css;
-
guint close_buttons_sensitive : 1;
guint ignore_focused_page_update : 1;
};
@@ -169,12 +167,6 @@ gedit_notebook_dispose (GObject *object)
notebook->priv->ui_settings = NULL;
}
- if (notebook->priv->css != NULL)
- {
- g_object_unref (notebook->priv->css);
- notebook->priv->css = NULL;
- }
-
G_OBJECT_CLASS (gedit_notebook_parent_class)->dispose (object);
}
@@ -685,66 +677,4 @@ gedit_notebook_get_close_buttons_sensitive (GeditNotebook *nb)
return nb->priv->close_buttons_sensitive;
}
-static void
-remove_right_padding (GeditNotebook *nb)
-{
- GtkStyleContext *context;
- GtkBorder padding;
- gchar *modified_style;
- GError *error = NULL;
- const gchar style[] =
- ".notebook {\n"
- "padding: %d 0 %d %d;\n"
- "}";
-
- /* FIXME: find out a css like way to do this, right now padding-right/left
- doesn't work */
- context = gtk_widget_get_style_context (GTK_WIDGET (nb));
- gtk_style_context_get_padding (context, gtk_style_context_get_state (context),
- &padding);
-
- modified_style = g_strdup_printf (style, padding.top, padding.bottom, padding.left);
-
- /* make it as small as possible */
- if (nb->priv->css == NULL)
- {
- nb->priv->css = gtk_css_provider_new ();
- }
-
- if (gtk_css_provider_load_from_data (nb->priv->css, modified_style, -1, &error))
- {
- gtk_style_context_add_provider (context,
- GTK_STYLE_PROVIDER (nb->priv->css),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- }
- else
- {
- g_warning ("%s", error->message);
- g_error_free (error);
- }
-
- g_free (modified_style);
-}
-
-void
-gedit_notebook_collapse_border (GeditNotebook *nb,
- gboolean collapse)
-{
- g_return_if_fail (GEDIT_IS_NOTEBOOK (nb));
-
- if (collapse)
- {
- remove_right_padding (nb);
- }
- /* if we made some modification put it back to the default state */
- else if (nb->priv->css != NULL)
- {
- GtkStyleContext *context;
-
- context = gtk_widget_get_style_context (GTK_WIDGET (nb));
- gtk_style_context_remove_provider (context,
- GTK_STYLE_PROVIDER (nb->priv->css));
- }
-}
-
/* ex:set ts=8 noet: */
diff --git a/gedit/gedit-notebook.h b/gedit/gedit-notebook.h
index 4a1f981..27a32be 100644
--- a/gedit/gedit-notebook.h
+++ b/gedit/gedit-notebook.h
@@ -120,9 +120,6 @@ void gedit_notebook_set_close_buttons_sensitive
gboolean gedit_notebook_get_close_buttons_sensitive
(GeditNotebook *nb);
-void gedit_notebook_collapse_border (GeditNotebook *nb,
- gboolean collapse);
-
G_END_DECLS
#endif /* GEDIT_NOTEBOOK_H */
diff --git a/gedit/gedit-status-combo-box.c b/gedit/gedit-status-combo-box.c
index 3cbcea6..239900a 100644
--- a/gedit/gedit-status-combo-box.c
+++ b/gedit/gedit-status-combo-box.c
@@ -43,11 +43,6 @@ struct _GeditStatusComboBoxPrivate
GtkWidget *current_item;
};
-struct _GeditStatusComboBoxClassPrivate
-{
- GtkCssProvider *css;
-};
-
/* Signals */
enum
{
@@ -65,8 +60,7 @@ enum
static guint signals[NUM_SIGNALS] = { 0 };
-G_DEFINE_TYPE_WITH_CODE (GeditStatusComboBox, gedit_status_combo_box, GTK_TYPE_EVENT_BOX,
- g_type_add_class_private (g_define_type_id, sizeof (GeditStatusComboBoxClassPrivate)))
+G_DEFINE_TYPE (GeditStatusComboBox, gedit_status_combo_box, GTK_TYPE_EVENT_BOX)
static void
gedit_status_combo_box_finalize (GObject *object)
@@ -148,15 +142,6 @@ gedit_status_combo_box_class_init (GeditStatusComboBoxClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- static const gchar style[] =
- "* {\n"
- "-GtkButton-default-border : 0;\n"
- "-GtkButton-default-outside-border : 0;\n"
- "-GtkButton-inner-border: 0;\n"
- "-GtkWidget-focus-line-width : 0;\n"
- "-GtkWidget-focus-padding : 0;\n"
- "padding: 0;\n"
- "}";
object_class->finalize = gedit_status_combo_box_finalize;
object_class->get_property = gedit_status_combo_box_get_property;
@@ -182,11 +167,6 @@ gedit_status_combo_box_class_init (GeditStatusComboBoxClass *klass)
G_PARAM_READWRITE));
g_type_class_add_private (object_class, sizeof (GeditStatusComboBoxPrivate));
-
- klass->priv = G_TYPE_CLASS_GET_PRIVATE (klass, GEDIT_TYPE_STATUS_COMBO_BOX, GeditStatusComboBoxClassPrivate);
-
- klass->priv->css = gtk_css_provider_new ();
- gtk_css_provider_load_from_data (klass->priv->css, style, -1, NULL);
}
static void
@@ -325,8 +305,6 @@ set_shadow_type (GeditStatusComboBox *combo)
static void
gedit_status_combo_box_init (GeditStatusComboBox *self)
{
- GtkStyleContext *context;
-
self->priv = GEDIT_STATUS_COMBO_BOX_GET_PRIVATE (self);
gtk_event_box_set_visible_window (GTK_EVENT_BOX (self), TRUE);
@@ -386,16 +364,6 @@ gedit_status_combo_box_init (GeditStatusComboBox *self)
"deactivate",
G_CALLBACK (menu_deactivate),
self);
-
- /* make it as small as possible */
- context = gtk_widget_get_style_context (GTK_WIDGET (self->priv->button));
- gtk_style_context_add_provider (context,
- GTK_STYLE_PROVIDER (GEDIT_STATUS_COMBO_BOX_GET_CLASS (self)->priv->css),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- context = gtk_widget_get_style_context (GTK_WIDGET (self->priv->frame));
- gtk_style_context_add_provider (context,
- GTK_STYLE_PROVIDER (GEDIT_STATUS_COMBO_BOX_GET_CLASS (self)->priv->css),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
/* public functions */
diff --git a/gedit/gedit-status-combo-box.h b/gedit/gedit-status-combo-box.h
index c893627..e20137b 100644
--- a/gedit/gedit-status-combo-box.h
+++ b/gedit/gedit-status-combo-box.h
@@ -50,8 +50,6 @@ struct _GeditStatusComboBox
struct _GeditStatusComboBoxClass
{
GtkEventBoxClass parent_class;
-
- GeditStatusComboBoxClassPrivate *priv;
void (*changed) (GeditStatusComboBox *combo,
GtkMenuItem *item);
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
index ac64595..907c066 100644
--- a/gedit/gedit-window.c
+++ b/gedit/gedit-window.c
@@ -382,8 +382,18 @@ gedit_window_window_state_event (GtkWidget *widget,
show = !(event->new_window_state &
(GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN));
- gedit_multi_notebook_collapse_notebook_border (window->priv->multi_notebook,
- !show);
+ if (show)
+ {
+ gtk_style_context_remove_class (gtk_widget_get_style_context (widget),
+ "fullscreen");
+ }
+ else
+ {
+ gtk_style_context_add_class (gtk_widget_get_style_context (widget),
+ "fullscreen");
+ }
+
+ gtk_widget_reset_style (widget);
}
if (GTK_WIDGET_CLASS (gedit_window_parent_class)->window_state_event)
diff --git a/gedit/gedit.c b/gedit/gedit.c
index e4caec4..418bc4e 100644
--- a/gedit/gedit.c
+++ b/gedit/gedit.c
@@ -159,6 +159,38 @@ gedit_main_window (void)
}
static void
+load_css ()
+{
+ /* Load css */
+ GtkCssProvider *css = gtk_css_provider_new ();
+ gchar *css_path;
+ GError *error = NULL;
+
+ css_path = g_build_filename (gedit_dirs_get_gedit_data_dir (),
+ "css",
+ "gedit.css",
+ NULL);
+
+ if (!gtk_css_provider_load_from_path (css, css_path, &error))
+ {
+ g_warning ("Failed to load stylesheet `%s': %s",
+ css_path,
+ error->message);
+
+ g_error_free (error);
+ }
+ else
+ {
+ gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+ GTK_STYLE_PROVIDER (css),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
+
+ g_free (css_path);
+ g_object_unref (css);
+}
+
+static void
gedit_main (gboolean service)
{
GeditPluginsEngine *engine;
@@ -185,6 +217,8 @@ gedit_main (gboolean service)
gedit_debug_message (DEBUG_APP, "Init session manager");
gedit_session_init ();
+ load_css ();
+
if (!service && gedit_session_is_restored ())
{
restored = gedit_session_load ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]