summaryrefslogtreecommitdiffstats
path: root/src/ege-color-prof-tracker.cpp
diff options
context:
space:
mode:
authorMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
committerMartin Owens <doctormo@gmail.com>2014-03-27 01:33:44 +0000
commit5a4fb2325f60d292b47330f540b26a3279341c90 (patch)
treed2aa7967be25450b83e625025366c618101ae49f /src/ege-color-prof-tracker.cpp
parentThe Polar Arrange Tab of the Arrange Dialog now hides the parametric (diff)
parentRemove Snap menu item and improve grid menu item text (diff)
downloadinkscape-5a4fb2325f60d292b47330f540b26a3279341c90.tar.gz
inkscape-5a4fb2325f60d292b47330f540b26a3279341c90.zip
Commit a merge to trunk, with probabal errors
(bzr r11073.1.36)
Diffstat (limited to 'src/ege-color-prof-tracker.cpp')
-rw-r--r--src/ege-color-prof-tracker.cpp227
1 files changed, 101 insertions, 126 deletions
diff --git a/src/ege-color-prof-tracker.cpp b/src/ege-color-prof-tracker.cpp
index 81aee087e..eca90ecb7 100644
--- a/src/ege-color-prof-tracker.cpp
+++ b/src/ege-color-prof-tracker.cpp
@@ -90,11 +90,9 @@ enum {
ADDED,
REMOVED,
MODIFIED,
- LAST_SIGNAL};
-
+ LAST_SIGNAL
+};
-static void ege_color_prof_tracker_class_init( EgeColorProfTrackerClass* klass );
-static void ege_color_prof_tracker_init( EgeColorProfTracker* tracker );
static void ege_color_prof_tracker_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec );
static void ege_color_prof_tracker_set_property( GObject* obj, guint propId, const GValue *value, GParamSpec* pspec );
@@ -112,9 +110,11 @@ typedef struct _ScreenTrack {
GdkFilterReturn x11_win_filter(GdkXEvent *xevent, GdkEvent *event, gpointer data);
void handle_property_change(GdkScreen* screen, const gchar* name);
void add_x11_tracking_for_screen(GdkScreen* screen, ScreenTrack* screenTrack);
+static void fire(GdkScreen* screen, gint monitor);
+static void clear_profile( GdkScreen* screen, guint monitor );
+static void set_profile( GdkScreen* screen, guint monitor, const guint8* data, guint len );
#endif /* GDK_WINDOWING_X11 */
-static GObjectClass* gParentClass = 0;
static guint signals[LAST_SIGNAL] = {0};
static GSList* tracked_screens = 0;
@@ -135,38 +135,13 @@ static void event_after_cb( GtkWidget* widget, GdkEvent* event, gpointer user_da
static void target_hierarchy_changed_cb(GtkWidget* widget, GtkWidget* prev_top, gpointer user_data);
static void target_screen_changed_cb(GtkWidget* widget, GdkScreen* prev_screen, gpointer user_data);
static void screen_size_changed_cb(GdkScreen* screen, gpointer user_data);
-static void fire(GdkScreen* screen, gint monitor);
-static void clear_profile( GdkScreen* screen, guint monitor );
-static void set_profile( GdkScreen* screen, guint monitor, const guint8* data, guint len );
static void track_screen( GdkScreen* screen, EgeColorProfTracker* tracker );
-GType ege_color_prof_tracker_get_type( void )
-{
- static GType myType = 0;
- if ( !myType ) {
- static const GTypeInfo myInfo = {
- sizeof( EgeColorProfTrackerClass ),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc)ege_color_prof_tracker_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof( EgeColorProfTracker ),
- 0, /* n_preallocs */
- (GInstanceInitFunc)ege_color_prof_tracker_init,
- NULL
- };
-
- myType = g_type_register_static( G_TYPE_OBJECT, "EgeColorProfTracker", &myInfo, (GTypeFlags)0 );
- }
-
- return myType;
-}
+G_DEFINE_TYPE(EgeColorProfTracker, ege_color_prof_tracker, G_TYPE_OBJECT);
void ege_color_prof_tracker_class_init( EgeColorProfTrackerClass* klass )
{
if ( klass ) {
- gParentClass = G_OBJECT_CLASS( g_type_class_peek_parent( klass ) );
GObjectClass* objClass = G_OBJECT_CLASS( klass );
objClass->get_property = ege_color_prof_tracker_get_property;
@@ -263,26 +238,27 @@ void ege_color_prof_tracker_get_profile( EgeColorProfTracker const * tracker, gp
{
gpointer dataPos = 0;
guint dataLen = 0;
- if ( tracker && tracker->private_data->_target ) {
- GdkScreen* screen = gtk_widget_get_screen(tracker->private_data->_target);
- GSList* curr = tracked_screens;
- while ( curr ) {
- ScreenTrack* screenTrack = (ScreenTrack*)curr->data;
- if ( screenTrack->screen == screen ) {
- if ( tracker->private_data->_monitor >= 0 && tracker->private_data->_monitor < (gint)screenTrack->profiles->len ) {
- GByteArray* gba = (GByteArray*)g_ptr_array_index( screenTrack->profiles, tracker->private_data->_monitor );
- if ( gba ) {
- dataPos = gba->data;
- dataLen = gba->len;
+ if (tracker) {
+ if (tracker->private_data->_target ) {
+ GdkScreen* screen = gtk_widget_get_screen(tracker->private_data->_target);
+ GSList* curr = tracked_screens;
+ while ( curr ) {
+ ScreenTrack* screenTrack = static_cast<ScreenTrack*>(curr->data);
+ if ( screenTrack->screen == screen ) {
+ if ( tracker->private_data->_monitor >= 0 && tracker->private_data->_monitor < (static_cast<gint>(screenTrack->profiles->len))) {
+ GByteArray* gba = static_cast<GByteArray*>(g_ptr_array_index(screenTrack->profiles, tracker->private_data->_monitor));
+ if ( gba ) {
+ dataPos = gba->data;
+ dataLen = gba->len;
+ }
+ } else {
+ g_warning("No profile data tracked for the specified item.");
}
- } else {
- g_warning("No profile data tracked for the specified item.");
+ break;
}
- break;
+ curr = g_slist_next(curr);
}
- curr = g_slist_next(curr);
}
-
}
if ( ptr ) {
*ptr = dataPos;
@@ -498,83 +474,6 @@ void screen_size_changed_cb(GdkScreen* screen, gpointer user_data)
}
}
-void fire(GdkScreen* screen, gint monitor)
-{
- GSList* curr = tracked_screens;
- while ( curr ) {
- ScreenTrack* track = (ScreenTrack*)curr->data;
- if ( track->screen == screen) {
- GSList* trackHook = track->trackers;
- while ( trackHook ) {
- EgeColorProfTracker* tracker = (EgeColorProfTracker*)(trackHook->data);
- if ( (monitor == -1) || (tracker->private_data->_monitor == monitor) ) {
- g_signal_emit( G_OBJECT(tracker), signals[CHANGED], 0 );
- }
- trackHook = g_slist_next(trackHook);
- }
- }
- curr = g_slist_next(curr);
- }
-}
-
-static void clear_profile( GdkScreen* screen, guint monitor )
-{
- GSList* curr = tracked_screens;
- while ( curr && ((ScreenTrack*)curr->data)->screen != screen ) {
- curr = g_slist_next(curr);
- }
- if ( curr ) {
- ScreenTrack* track = (ScreenTrack*)curr->data;
- guint i = 0;
- GByteArray* previous = 0;
- for ( i = track->profiles->len; i <= monitor; i++ ) {
- g_ptr_array_add( track->profiles, 0 );
- }
- previous = (GByteArray*)g_ptr_array_index( track->profiles, monitor );
- if ( previous ) {
- g_byte_array_free( previous, TRUE );
- }
-
- track->profiles->pdata[monitor] = 0;
- }
-}
-
-static void set_profile( GdkScreen* screen, guint monitor, const guint8* data, guint len )
-{
- GSList* curr = tracked_screens;
- while ( curr && ((ScreenTrack*)curr->data)->screen != screen ) {
- curr = g_slist_next(curr);
- }
- if ( curr ) {
- /* Something happened to a screen being tracked. */
- ScreenTrack* track = (ScreenTrack*)curr->data;
- gint screenNum = gdk_screen_get_number(screen);
- guint i = 0;
- GByteArray* previous = 0;
- GSList* abstracts = 0;
-
- for ( i = track->profiles->len; i <= monitor; i++ ) {
- g_ptr_array_add( track->profiles, 0 );
- }
- previous = (GByteArray*)g_ptr_array_index( track->profiles, monitor );
- if ( previous ) {
- g_byte_array_free( previous, TRUE );
- }
-
- if ( data && len ) {
- GByteArray* newBytes = g_byte_array_sized_new( len );
- newBytes = g_byte_array_append( newBytes, data, len );
- track->profiles->pdata[monitor] = newBytes;
- } else {
- track->profiles->pdata[monitor] = 0;
- }
-
- for ( abstracts = abstract_trackers; abstracts; abstracts = g_slist_next(abstracts) ) {
- g_signal_emit( G_OBJECT(abstracts->data), signals[MODIFIED], 0, screenNum, monitor );
- }
- }
-}
-
#ifdef GDK_WINDOWING_X11
GdkFilterReturn x11_win_filter(GdkXEvent *xevent,
GdkEvent *event,
@@ -590,9 +489,8 @@ GdkFilterReturn x11_win_filter(GdkXEvent *xevent,
const gchar* name = gdk_x11_get_xatom_name(note->atom);
if ( strncmp("_ICC_PROFILE", name, 12 ) == 0 ) {
XEvent* native = (XEvent*)xevent;
- Status stat = Success;
XWindowAttributes tmp;
- stat = XGetWindowAttributes( native->xproperty.display, native->xproperty.window, &tmp );
+ Status stat = XGetWindowAttributes( native->xproperty.display, native->xproperty.window, &tmp );
if ( stat ) {
GdkDisplay* display = gdk_x11_lookup_xdisplay(native->xproperty.display);
if ( display ) {
@@ -717,4 +615,81 @@ void add_x11_tracking_for_screen(GdkScreen* screen, ScreenTrack* screenTrack)
}
}
}
+
+void fire(GdkScreen* screen, gint monitor)
+{
+ GSList* curr = tracked_screens;
+ while ( curr ) {
+ ScreenTrack* track = (ScreenTrack*)curr->data;
+ if ( track->screen == screen) {
+ GSList* trackHook = track->trackers;
+ while ( trackHook ) {
+ EgeColorProfTracker* tracker = (EgeColorProfTracker*)(trackHook->data);
+ if ( (monitor == -1) || (tracker->private_data->_monitor == monitor) ) {
+ g_signal_emit( G_OBJECT(tracker), signals[CHANGED], 0 );
+ }
+ trackHook = g_slist_next(trackHook);
+ }
+ }
+ curr = g_slist_next(curr);
+ }
+}
+
+static void clear_profile( GdkScreen* screen, guint monitor )
+{
+ GSList* curr = tracked_screens;
+ while ( curr && ((ScreenTrack*)curr->data)->screen != screen ) {
+ curr = g_slist_next(curr);
+ }
+ if ( curr ) {
+ ScreenTrack* track = (ScreenTrack*)curr->data;
+ guint i = 0;
+ GByteArray* previous = 0;
+ for ( i = track->profiles->len; i <= monitor; i++ ) {
+ g_ptr_array_add( track->profiles, 0 );
+ }
+ previous = (GByteArray*)g_ptr_array_index( track->profiles, monitor );
+ if ( previous ) {
+ g_byte_array_free( previous, TRUE );
+ }
+
+ track->profiles->pdata[monitor] = 0;
+ }
+}
+
+static void set_profile( GdkScreen* screen, guint monitor, const guint8* data, guint len )
+{
+ GSList* curr = tracked_screens;
+ while ( curr && ((ScreenTrack*)curr->data)->screen != screen ) {
+ curr = g_slist_next(curr);
+ }
+ if ( curr ) {
+ /* Something happened to a screen being tracked. */
+ ScreenTrack* track = (ScreenTrack*)curr->data;
+ gint screenNum = gdk_screen_get_number(screen);
+ guint i = 0;
+ GByteArray* previous = 0;
+ GSList* abstracts = 0;
+
+ for ( i = track->profiles->len; i <= monitor; i++ ) {
+ g_ptr_array_add( track->profiles, 0 );
+ }
+ previous = (GByteArray*)g_ptr_array_index( track->profiles, monitor );
+ if ( previous ) {
+ g_byte_array_free( previous, TRUE );
+ }
+
+ if ( data && len ) {
+ GByteArray* newBytes = g_byte_array_sized_new( len );
+ newBytes = g_byte_array_append( newBytes, data, len );
+ track->profiles->pdata[monitor] = newBytes;
+ } else {
+ track->profiles->pdata[monitor] = 0;
+ }
+
+ for ( abstracts = abstract_trackers; abstracts; abstracts = g_slist_next(abstracts) ) {
+ g_signal_emit( G_OBJECT(abstracts->data), signals[MODIFIED], 0, screenNum, monitor );
+ }
+ }
+}
#endif /* GDK_WINDOWING_X11 */