@ -372,17 +372,20 @@ bool handle_ipc_readable(struct swaybar *bar) {
if ( ! resp ) {
if ( ! resp ) {
return false ;
return false ;
}
}
json_object * result = json_tokener_parse ( resp - > payload ) ;
if ( ! result ) {
wlr_log ( WLR_ERROR , " failed to parse payload as json " ) ;
free_ipc_response ( resp ) ;
return false ;
}
bool bar_is_dirty = true ;
switch ( resp - > type ) {
switch ( resp - > type ) {
case IPC_EVENT_WORKSPACE :
case IPC_EVENT_WORKSPACE :
ipc_get_workspaces ( bar ) ;
ipc_get_workspaces ( bar ) ;
break ;
break ;
case IPC_EVENT_MODE : {
case IPC_EVENT_MODE : {
json_object * result = json_tokener_parse ( resp - > payload ) ;
if ( ! result ) {
free_ipc_response ( resp ) ;
wlr_log ( WLR_ERROR , " failed to parse payload as json " ) ;
return false ;
}
json_object * json_change , * json_pango_markup ;
json_object * json_change , * json_pango_markup ;
if ( json_object_object_get_ex ( result , " change " , & json_change ) ) {
if ( json_object_object_get_ex ( result , " change " , & json_change ) ) {
const char * change = json_object_get_string ( json_change ) ;
const char * change = json_object_get_string ( json_change ) ;
@ -390,21 +393,20 @@ bool handle_ipc_readable(struct swaybar *bar) {
bar - > mode = strcmp ( change , " default " ) ! = 0 ? strdup ( change ) : NULL ;
bar - > mode = strcmp ( change , " default " ) ! = 0 ? strdup ( change ) : NULL ;
} else {
} else {
wlr_log ( WLR_ERROR , " failed to parse response " ) ;
wlr_log ( WLR_ERROR , " failed to parse response " ) ;
json_object_put ( result ) ;
bar_is_dirty = false ;
free_ipc_response ( resp ) ;
break ;
return false ;
}
}
if ( json_object_object_get_ex ( result ,
if ( json_object_object_get_ex ( result ,
" pango_markup " , & json_pango_markup ) ) {
" pango_markup " , & json_pango_markup ) ) {
bar - > mode_pango_markup = json_object_get_boolean ( json_pango_markup ) ;
bar - > mode_pango_markup = json_object_get_boolean ( json_pango_markup ) ;
}
}
json_object_put ( result ) ;
break ;
break ;
}
}
default :
default :
free_ipc_response ( resp ) ;
bar_is_dirty = false ;
return false ;
break ;
}
}
json_object_put ( result ) ;
free_ipc_response ( resp ) ;
free_ipc_response ( resp ) ;
return true ;
return bar_is_dirty ;
}
}