pidgin/pidgin
Clone
Summary
Browse
Changes
Graph
Inline zephyr z_call* macros.
2021-01-13, Elliott Sales de Andrade
1f67d7260477
Inline zephyr z_call* macros.
Each one is used in only one place (though multiple times in each), so they
don't really help understanding anything.
Testing Done:
compiled only
Reviewed at https://reviews.imfreedom.org/r/421/
/*
* Buddy List Themes for Pidgin
*
* Pidgin is the legal property of its developers, whose names are too numerous
* to list here. Please refer to the COPYRIGHT file distributed with this
* source distribution.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
#include
"gtkblist-theme.h"
/******************************************************************************
* Structs
*****************************************************************************/
/**
* PidginBlistTheme:
*
* A pidgin buddy list theme.
* This is an object for Purple to represent a buddy list theme.
*
* PidginBlistTheme is a PurpleTheme Object.
*/
struct
_PidginBlistTheme
{
PurpleTheme
parent
;
};
typedef
struct
{
/* Buddy list */
gdouble
opacity
;
GdkRGBA
*
bgcolor
;
PidginBlistLayout
*
layout
;
/* groups */
GdkRGBA
*
expanded_color
;
PidginThemeFont
*
expanded
;
GdkRGBA
*
collapsed_color
;
PidginThemeFont
*
collapsed
;
/* buddy */
GdkRGBA
*
contact_color
;
PidginThemeFont
*
contact
;
PidginThemeFont
*
online
;
PidginThemeFont
*
away
;
PidginThemeFont
*
offline
;
PidginThemeFont
*
idle
;
PidginThemeFont
*
message
;
PidginThemeFont
*
message_nick_said
;
PidginThemeFont
*
status
;
}
PidginBlistThemePrivate
;
struct
_PidginThemeFont
{
gchar
*
font
;
gchar
color
[
10
];
GdkRGBA
*
gdkcolor
;
};
/******************************************************************************
* Enums
*****************************************************************************/
enum
{
PROP_ZERO
=
0
,
PROP_BACKGROUND_COLOR
,
PROP_OPACITY
,
PROP_LAYOUT
,
PROP_EXPANDED_COLOR
,
PROP_EXPANDED_TEXT
,
PROP_COLLAPSED_COLOR
,
PROP_COLLAPSED_TEXT
,
PROP_CONTACT_COLOR
,
PROP_CONTACT
,
PROP_ONLINE
,
PROP_AWAY
,
PROP_OFFLINE
,
PROP_IDLE
,
PROP_MESSAGE
,
PROP_MESSAGE_NICK_SAID
,
PROP_STATUS
,
PROP_LAST
};
/******************************************************************************
* Globals
*****************************************************************************/
static
GParamSpec
*
properties
[
PROP_LAST
];
G_DEFINE_TYPE_WITH_PRIVATE
(
PidginBlistTheme
,
pidgin_blist_theme
,
PURPLE_TYPE_THEME
);
/******************************************************************************
* Helpers
*****************************************************************************/
PidginThemeFont
*
pidgin_theme_font_new
(
const
gchar
*
face
,
GdkRGBA
*
color
)
{
PidginThemeFont
*
font
=
g_new0
(
PidginThemeFont
,
1
);
font
->
font
=
g_strdup
(
face
);
if
(
color
)
pidgin_theme_font_set_color
(
font
,
color
);
return
font
;
}
void
pidgin_theme_font_free
(
PidginThemeFont
*
pair
)
{
if
(
pair
!=
NULL
)
{
g_free
(
pair
->
font
);
if
(
pair
->
gdkcolor
)
gdk_rgba_free
(
pair
->
gdkcolor
);
g_free
(
pair
);
}
}
static
PidginThemeFont
*
copy_font_and_color
(
const
PidginThemeFont
*
pair
)
{
PidginThemeFont
*
copy
;
if
(
pair
==
NULL
)
return
NULL
;
copy
=
g_new0
(
PidginThemeFont
,
1
);
copy
->
font
=
g_strdup
(
pair
->
font
);
strncpy
(
copy
->
color
,
pair
->
color
,
sizeof
(
copy
->
color
)
-
1
);
if
(
pair
->
gdkcolor
)
{
copy
->
gdkcolor
=
gdk_rgba_copy
(
pair
->
gdkcolor
);
}
return
copy
;
}
void
pidgin_theme_font_set_font_face
(
PidginThemeFont
*
font
,
const
gchar
*
face
)
{
g_return_if_fail
(
font
);
g_return_if_fail
(
face
);
g_free
(
font
->
font
);
font
->
font
=
g_strdup
(
face
);
}
void
pidgin_theme_font_set_color
(
PidginThemeFont
*
font
,
const
GdkRGBA
*
color
)
{
g_return_if_fail
(
font
);
if
(
font
->
gdkcolor
)
gdk_rgba_free
(
font
->
gdkcolor
);
font
->
gdkcolor
=
color
?
gdk_rgba_copy
(
color
)
:
NULL
;
if
(
color
)
g_snprintf
(
font
->
color
,
sizeof
(
font
->
color
),
"#%02x%02x%02x"
,
(
unsigned
int
)(
color
->
red
*
255
),
(
unsigned
int
)(
color
->
green
*
255
),
(
unsigned
int
)(
color
->
blue
*
255
));
else
font
->
color
[
0
]
=
'\0'
;
}
const
gchar
*
pidgin_theme_font_get_font_face
(
PidginThemeFont
*
font
)
{
g_return_val_if_fail
(
font
,
NULL
);
return
font
->
font
;
}
const
GdkRGBA
*
pidgin_theme_font_get_color
(
PidginThemeFont
*
font
)
{
g_return_val_if_fail
(
font
,
NULL
);
return
font
->
gdkcolor
;
}
const
gchar
*
pidgin_theme_font_get_color_describe
(
PidginThemeFont
*
font
)
{
g_return_val_if_fail
(
font
,
NULL
);
return
font
->
color
[
0
]
?
font
->
color
:
NULL
;
}
/******************************************************************************
* GObject Stuff
*****************************************************************************/
static
void
pidgin_blist_theme_get_property
(
GObject
*
obj
,
guint
param_id
,
GValue
*
value
,
GParamSpec
*
psec
)
{
PidginBlistTheme
*
theme
=
PIDGIN_BLIST_THEME
(
obj
);
switch
(
param_id
)
{
case
PROP_BACKGROUND_COLOR
:
g_value_set_boxed
(
value
,
pidgin_blist_theme_get_background_color
(
theme
));
break
;
case
PROP_OPACITY
:
g_value_set_double
(
value
,
pidgin_blist_theme_get_opacity
(
theme
));
break
;
case
PROP_LAYOUT
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_layout
(
theme
));
break
;
case
PROP_EXPANDED_COLOR
:
g_value_set_boxed
(
value
,
pidgin_blist_theme_get_expanded_background_color
(
theme
));
break
;
case
PROP_EXPANDED_TEXT
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_expanded_text_info
(
theme
));
break
;
case
PROP_COLLAPSED_COLOR
:
g_value_set_boxed
(
value
,
pidgin_blist_theme_get_collapsed_background_color
(
theme
));
break
;
case
PROP_COLLAPSED_TEXT
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_collapsed_text_info
(
theme
));
break
;
case
PROP_CONTACT_COLOR
:
g_value_set_boxed
(
value
,
pidgin_blist_theme_get_contact_color
(
theme
));
break
;
case
PROP_CONTACT
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_contact_text_info
(
theme
));
break
;
case
PROP_ONLINE
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_online_text_info
(
theme
));
break
;
case
PROP_AWAY
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_away_text_info
(
theme
));
break
;
case
PROP_OFFLINE
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_offline_text_info
(
theme
));
break
;
case
PROP_IDLE
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_idle_text_info
(
theme
));
break
;
case
PROP_MESSAGE
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_unread_message_text_info
(
theme
));
break
;
case
PROP_MESSAGE_NICK_SAID
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_unread_message_nick_said_text_info
(
theme
));
break
;
case
PROP_STATUS
:
g_value_set_pointer
(
value
,
pidgin_blist_theme_get_status_text_info
(
theme
));
break
;
default
:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
obj
,
param_id
,
psec
);
break
;
}
}
static
void
pidgin_blist_theme_set_property
(
GObject
*
obj
,
guint
param_id
,
const
GValue
*
value
,
GParamSpec
*
psec
)
{
PidginBlistTheme
*
theme
=
PIDGIN_BLIST_THEME
(
obj
);
switch
(
param_id
)
{
case
PROP_BACKGROUND_COLOR
:
pidgin_blist_theme_set_background_color
(
theme
,
g_value_get_boxed
(
value
));
break
;
case
PROP_OPACITY
:
pidgin_blist_theme_set_opacity
(
theme
,
g_value_get_double
(
value
));
break
;
case
PROP_LAYOUT
:
pidgin_blist_theme_set_layout
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_EXPANDED_COLOR
:
pidgin_blist_theme_set_expanded_background_color
(
theme
,
g_value_get_boxed
(
value
));
break
;
case
PROP_EXPANDED_TEXT
:
pidgin_blist_theme_set_expanded_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_COLLAPSED_COLOR
:
pidgin_blist_theme_set_collapsed_background_color
(
theme
,
g_value_get_boxed
(
value
));
break
;
case
PROP_COLLAPSED_TEXT
:
pidgin_blist_theme_set_collapsed_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_CONTACT_COLOR
:
pidgin_blist_theme_set_contact_color
(
theme
,
g_value_get_boxed
(
value
));
break
;
case
PROP_CONTACT
:
pidgin_blist_theme_set_contact_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_ONLINE
:
pidgin_blist_theme_set_online_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_AWAY
:
pidgin_blist_theme_set_away_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_OFFLINE
:
pidgin_blist_theme_set_offline_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_IDLE
:
pidgin_blist_theme_set_idle_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_MESSAGE
:
pidgin_blist_theme_set_unread_message_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_MESSAGE_NICK_SAID
:
pidgin_blist_theme_set_unread_message_nick_said_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
case
PROP_STATUS
:
pidgin_blist_theme_set_status_text_info
(
theme
,
g_value_get_pointer
(
value
));
break
;
default
:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
obj
,
param_id
,
psec
);
break
;
}
}
static
void
pidgin_blist_theme_finalize
(
GObject
*
obj
)
{
PidginBlistThemePrivate
*
priv
;
priv
=
pidgin_blist_theme_get_instance_private
(
PIDGIN_BLIST_THEME
(
obj
));
/* Buddy List */
if
(
priv
->
bgcolor
)
gdk_rgba_free
(
priv
->
bgcolor
);
g_free
(
priv
->
layout
);
/* Group */
if
(
priv
->
expanded_color
)
gdk_rgba_free
(
priv
->
expanded_color
);
pidgin_theme_font_free
(
priv
->
expanded
);
if
(
priv
->
collapsed_color
)
gdk_rgba_free
(
priv
->
collapsed_color
);
pidgin_theme_font_free
(
priv
->
collapsed
);
/* Buddy */
if
(
priv
->
contact_color
)
gdk_rgba_free
(
priv
->
contact_color
);
pidgin_theme_font_free
(
priv
->
contact
);
pidgin_theme_font_free
(
priv
->
online
);
pidgin_theme_font_free
(
priv
->
away
);
pidgin_theme_font_free
(
priv
->
offline
);
pidgin_theme_font_free
(
priv
->
idle
);
pidgin_theme_font_free
(
priv
->
message
);
pidgin_theme_font_free
(
priv
->
message_nick_said
);
pidgin_theme_font_free
(
priv
->
status
);
G_OBJECT_CLASS
(
pidgin_blist_theme_parent_class
)
->
finalize
(
obj
);
}
static
void
pidgin_blist_theme_init
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
priv
->
opacity
=
1.0
;
}
static
void
pidgin_blist_theme_class_init
(
PidginBlistThemeClass
*
klass
)
{
GObjectClass
*
obj_class
=
G_OBJECT_CLASS
(
klass
);
obj_class
->
get_property
=
pidgin_blist_theme_get_property
;
obj_class
->
set_property
=
pidgin_blist_theme_set_property
;
obj_class
->
finalize
=
pidgin_blist_theme_finalize
;
/* Buddy List */
properties
[
PROP_BACKGROUND_COLOR
]
=
g_param_spec_boxed
(
"background-color"
,
"Background Color"
,
"The background color for the buddy list"
,
GDK_TYPE_RGBA
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_OPACITY
]
=
g_param_spec_double
(
"opacity"
,
"Opacity"
,
"The opacity of the buddy list"
,
0.0
,
1.0
,
1.0
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_LAYOUT
]
=
g_param_spec_pointer
(
"layout"
,
"Layout"
,
"The layout of icons, name, and status of the buddy list"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
/* Group */
properties
[
PROP_EXPANDED_COLOR
]
=
g_param_spec_boxed
(
"expanded-color"
,
"Expanded Background Color"
,
"The background color of an expanded group"
,
GDK_TYPE_RGBA
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_EXPANDED_TEXT
]
=
g_param_spec_pointer
(
"expanded-text"
,
"Expanded Text"
,
"The text information for when a group is expanded"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_COLLAPSED_COLOR
]
=
g_param_spec_boxed
(
"collapsed-color"
,
"Collapsed Background Color"
,
"The background color of a collapsed group"
,
GDK_TYPE_RGBA
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_COLLAPSED_TEXT
]
=
g_param_spec_pointer
(
"collapsed-text"
,
"Collapsed Text"
,
"The text information for when a group is collapsed"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
/* Buddy */
properties
[
PROP_CONTACT_COLOR
]
=
g_param_spec_boxed
(
"contact-color"
,
"Contact/Chat Background Color"
,
"The background color of a contact or chat"
,
GDK_TYPE_RGBA
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_CONTACT
]
=
g_param_spec_pointer
(
"contact"
,
"Contact Text"
,
"The text information for when a contact is expanded"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_ONLINE
]
=
g_param_spec_pointer
(
"online"
,
"Online Text"
,
"The text information for when a buddy is online"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_AWAY
]
=
g_param_spec_pointer
(
"away"
,
"Away Text"
,
"The text information for when a buddy is away"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_OFFLINE
]
=
g_param_spec_pointer
(
"offline"
,
"Offline Text"
,
"The text information for when a buddy is offline"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_IDLE
]
=
g_param_spec_pointer
(
"idle"
,
"Idle Text"
,
"The text information for when a buddy is idle"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_MESSAGE
]
=
g_param_spec_pointer
(
"message"
,
"Message Text"
,
"The text information for when a buddy has an unread message"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_MESSAGE_NICK_SAID
]
=
g_param_spec_pointer
(
"message-nick-said"
,
"Message (Nick Said) Text"
,
"The text information for when a chat has an unread message that mentions your nickname"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
properties
[
PROP_STATUS
]
=
g_param_spec_pointer
(
"status"
,
"Status Text"
,
"The text information for a buddy's status"
,
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
);
g_object_class_install_properties
(
obj_class
,
PROP_LAST
,
properties
);
}
/**************************************************************************
* GBoxed Stuff
**************************************************************************/
static
PidginThemeFont
*
pidgin_theme_font_copy
(
PidginThemeFont
*
font
)
{
g_return_val_if_fail
(
font
!=
NULL
,
NULL
);
return
pidgin_theme_font_new
(
font
->
font
,
font
->
gdkcolor
);
}
GType
pidgin_theme_font_get_type
(
void
)
{
static
GType
type
=
0
;
if
(
type
==
0
)
{
type
=
g_boxed_type_register_static
(
"PidginThemeFont"
,
(
GBoxedCopyFunc
)
pidgin_theme_font_copy
,
(
GBoxedFreeFunc
)
pidgin_theme_font_free
);
}
return
type
;
}
static
PidginBlistLayout
*
pidgin_blist_layout_copy
(
const
PidginBlistLayout
*
layout
)
{
g_return_val_if_fail
(
layout
!=
NULL
,
NULL
);
return
g_memdup
(
layout
,
sizeof
(
PidginBlistLayout
));
}
GType
pidgin_blist_layout_get_type
(
void
)
{
static
GType
type
=
0
;
if
(
type
==
0
)
{
type
=
g_boxed_type_register_static
(
"PidginBlistLayout"
,
(
GBoxedCopyFunc
)
pidgin_blist_layout_copy
,
(
GBoxedFreeFunc
)
g_free
);
}
return
type
;
}
/*****************************************************************************
* Public API functions
*****************************************************************************/
/* get methods */
GdkRGBA
*
pidgin_blist_theme_get_background_color
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
bgcolor
;
}
gdouble
pidgin_blist_theme_get_opacity
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
1.0
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
opacity
;
}
PidginBlistLayout
*
pidgin_blist_theme_get_layout
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
layout
;
}
GdkRGBA
*
pidgin_blist_theme_get_expanded_background_color
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
expanded_color
;
}
PidginThemeFont
*
pidgin_blist_theme_get_expanded_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
expanded
;
}
GdkRGBA
*
pidgin_blist_theme_get_collapsed_background_color
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
collapsed_color
;
}
PidginThemeFont
*
pidgin_blist_theme_get_collapsed_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
collapsed
;
}
GdkRGBA
*
pidgin_blist_theme_get_contact_color
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
contact_color
;
}
PidginThemeFont
*
pidgin_blist_theme_get_contact_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
contact
;
}
PidginThemeFont
*
pidgin_blist_theme_get_online_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
online
;
}
PidginThemeFont
*
pidgin_blist_theme_get_away_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
away
;
}
PidginThemeFont
*
pidgin_blist_theme_get_offline_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
offline
;
}
PidginThemeFont
*
pidgin_blist_theme_get_idle_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
idle
;
}
PidginThemeFont
*
pidgin_blist_theme_get_unread_message_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
message
;
}
PidginThemeFont
*
pidgin_blist_theme_get_unread_message_nick_said_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
message_nick_said
;
}
PidginThemeFont
*
pidgin_blist_theme_get_status_text_info
(
PidginBlistTheme
*
theme
)
{
PidginBlistThemePrivate
*
priv
;
g_return_val_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
),
NULL
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
return
priv
->
status
;
}
/* Set Methods */
void
pidgin_blist_theme_set_background_color
(
PidginBlistTheme
*
theme
,
const
GdkRGBA
*
color
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
if
(
priv
->
bgcolor
)
gdk_rgba_free
(
priv
->
bgcolor
);
priv
->
bgcolor
=
color
?
gdk_rgba_copy
(
color
)
:
NULL
;
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_BACKGROUND_COLOR
]);
}
void
pidgin_blist_theme_set_opacity
(
PidginBlistTheme
*
theme
,
gdouble
opacity
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
)
||
opacity
<
0.0
||
opacity
>
1.0
);
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
priv
->
opacity
=
opacity
;
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_OPACITY
]);
}
void
pidgin_blist_theme_set_layout
(
PidginBlistTheme
*
theme
,
const
PidginBlistLayout
*
layout
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
g_free
(
priv
->
layout
);
priv
->
layout
=
pidgin_blist_layout_copy
(
layout
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_LAYOUT
]);
}
void
pidgin_blist_theme_set_expanded_background_color
(
PidginBlistTheme
*
theme
,
const
GdkRGBA
*
color
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
if
(
priv
->
expanded_color
)
gdk_rgba_free
(
priv
->
expanded_color
);
priv
->
expanded_color
=
color
?
gdk_rgba_copy
(
color
)
:
NULL
;
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_EXPANDED_COLOR
]);
}
void
pidgin_blist_theme_set_expanded_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
expanded
);
priv
->
expanded
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_EXPANDED_TEXT
]);
}
void
pidgin_blist_theme_set_collapsed_background_color
(
PidginBlistTheme
*
theme
,
const
GdkRGBA
*
color
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
if
(
priv
->
collapsed_color
)
gdk_rgba_free
(
priv
->
collapsed_color
);
priv
->
collapsed_color
=
color
?
gdk_rgba_copy
(
color
)
:
NULL
;
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_COLLAPSED_COLOR
]);
}
void
pidgin_blist_theme_set_collapsed_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
collapsed
);
priv
->
collapsed
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_COLLAPSED_TEXT
]);
}
void
pidgin_blist_theme_set_contact_color
(
PidginBlistTheme
*
theme
,
const
GdkRGBA
*
color
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
if
(
priv
->
contact_color
)
gdk_rgba_free
(
priv
->
contact_color
);
priv
->
contact_color
=
color
?
gdk_rgba_copy
(
color
)
:
NULL
;
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_CONTACT_COLOR
]);
}
void
pidgin_blist_theme_set_contact_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
contact
);
priv
->
contact
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_CONTACT
]);
}
void
pidgin_blist_theme_set_online_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
online
);
priv
->
online
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_ONLINE
]);
}
void
pidgin_blist_theme_set_away_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
away
);
priv
->
away
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_AWAY
]);
}
void
pidgin_blist_theme_set_offline_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
offline
);
priv
->
offline
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_OFFLINE
]);
}
void
pidgin_blist_theme_set_idle_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
idle
);
priv
->
idle
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_IDLE
]);
}
void
pidgin_blist_theme_set_unread_message_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
message
);
priv
->
message
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_MESSAGE
]);
}
void
pidgin_blist_theme_set_unread_message_nick_said_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
message_nick_said
);
priv
->
message_nick_said
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_MESSAGE_NICK_SAID
]);
}
void
pidgin_blist_theme_set_status_text_info
(
PidginBlistTheme
*
theme
,
const
PidginThemeFont
*
pair
)
{
PidginBlistThemePrivate
*
priv
;
g_return_if_fail
(
PIDGIN_IS_BLIST_THEME
(
theme
));
priv
=
pidgin_blist_theme_get_instance_private
(
theme
);
pidgin_theme_font_free
(
priv
->
status
);
priv
->
status
=
copy_font_and_color
(
pair
);
g_object_notify_by_pspec
(
G_OBJECT
(
theme
),
properties
[
PROP_STATUS
]);
}