Updating branch refs/heads/kelnos/new-sm-client to 44db1a6572d7078ed00e9625a1aefc47f85e9854 (commit) from e15b732f3990b6717a9fe02935d18ac2ae66fa63 (commit)
commit 44db1a6572d7078ed00e9625a1aefc47f85e9854 Author: Brian J. Tarricone <br...@tarricone.org> Date: Wed Sep 16 22:40:13 2009 -0700 make the XSMP-related stuff private docs/libxfce4ui-sections.txt | 1 - docs/libxfce4ui.types | 1 - libxfce4ui/libxfce4ui.symbols | 2 - libxfce4ui/xfce-sm-client.c | 143 ++++++++++++---------------------------- libxfce4ui/xfce-sm-client.h | 17 +----- 5 files changed, 44 insertions(+), 120 deletions(-) diff --git a/docs/libxfce4ui-sections.txt b/docs/libxfce4ui-sections.txt index ef8f4e3..b4427ae 100644 --- a/docs/libxfce4ui-sections.txt +++ b/docs/libxfce4ui-sections.txt @@ -123,5 +123,4 @@ xfce_sm_client_get_type xfce_sm_client_priority_get_type xfce_sm_client_restart_style_get_type xfce_sm_client_shutdown_hint_get_type -xfce_sm_client_state_get_type </SECTION> diff --git a/docs/libxfce4ui.types b/docs/libxfce4ui.types index 7816d40..a32bcf1 100644 --- a/docs/libxfce4ui.types +++ b/docs/libxfce4ui.types @@ -5,4 +5,3 @@ xfce_sm_client_get_type xfce_sm_client_priority_get_type xfce_sm_client_restart_style_get_type xfce_sm_client_shutdown_hint_get_type -xfce_sm_client_state_get_type diff --git a/libxfce4ui/libxfce4ui.symbols b/libxfce4ui/libxfce4ui.symbols index 5f9fd3d..a4236b5 100644 --- a/libxfce4ui/libxfce4ui.symbols +++ b/libxfce4ui/libxfce4ui.symbols @@ -50,7 +50,6 @@ libxfce4ui_check_version #if IN_HEADER(__LIBXFCE4UI_ENUM_TYPES_H__) #if IN_SOURCE(__LIBXFCE4UI_ENUM_TYPES_C__) xfce_sm_client_restart_style_get_type -xfce_sm_client_state_get_type xfce_sm_client_priority_get_type xfce_sm_client_shutdown_hint_get_type #endif @@ -104,7 +103,6 @@ xfce_sm_client_get_full xfce_sm_client_connect xfce_sm_client_disconnect xfce_sm_client_request_shutdown -xfce_sm_client_get_state xfce_sm_client_get_client_id xfce_sm_client_get_state_file xfce_sm_client_set_restart_style diff --git a/libxfce4ui/xfce-sm-client.c b/libxfce4ui/xfce-sm-client.c index e07d518..68b2434 100644 --- a/libxfce4ui/xfce-sm-client.c +++ b/libxfce4ui/xfce-sm-client.c @@ -64,6 +64,19 @@ ? -1 : (!s2 \ ? 1 : strcmp(s1, s2))) ) +typedef enum +{ + XFCE_SM_CLIENT_STATE_DISCONNECTED = 0, + XFCE_SM_CLIENT_STATE_REGISTERING, + XFCE_SM_CLIENT_STATE_IDLE, + XFCE_SM_CLIENT_STATE_SAVING_PHASE_1, + XFCE_SM_CLIENT_STATE_WAITING_FOR_INTERACT, + XFCE_SM_CLIENT_STATE_INTERACTING, + XFCE_SM_CLIENT_STATE_WAITING_FOR_PHASE_2, + XFCE_SM_CLIENT_STATE_SAVING_PHASE_2, + XFCE_SM_CLIENT_STATE_FROZEN, +} XfceSMClientState; + struct _XfceSMClient { GObject parent; @@ -111,10 +124,6 @@ typedef struct _XfceSMClientClass void (*quit)(XfceSMClient *sm_client); void (*quit_cancelled)(XfceSMClient *sm_client); - - void (*state_changed)(XfceSMClient *sm_client, - XfceSMClientState old_state, - XfceSMClientState new_state); } XfceSMClientClass; typedef struct @@ -132,15 +141,12 @@ enum SIG_QUIT_REQUESTED, SIG_QUIT, SIG_QUIT_CANCELLED, - SIG_STATE_CHANGED, N_SIGS }; enum { PROP0 = 0, - PROP_SESSION_CONNECTION, - PROP_STATE, PROP_RESUMED, PROP_RESTART_STYLE, PROP_PRIORITY, @@ -271,10 +277,10 @@ xfce_sm_client_class_init(XfceSMClientClass *klass) * Emitted when the application is required to quit. This is not * optional: if the client does not quit a short time after receiving * this signal, it will likely be terminated in some other way. While - * not required, the applicatiokn will usually receive quit-requested + * not required, the application will usually receive quit-requested * before receiving quit. If the application does not connect to this - * signal, #XfceSMClient will call exit(3) with an exit code of zero - * on behalf of the application. + * signal, #XfceSMClient will call <function>exit(3)</function> with + * an exit code of zero on behalf of the application. **/ signals[SIG_QUIT] = g_signal_new("quit", G_TYPE_FROM_CLASS(klass), @@ -301,41 +307,6 @@ xfce_sm_client_class_init(XfceSMClientClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - /** - * XfceSMClient::state-changed - * @sm_client: An #XfceSMClient - * @old_state: The client's previous state - * @new_state: The client's new (current) state - * - * Emitted whenever the client's internal session management state - * changes. This is mainly useful for debugging and other informative - * purposes. No actual actions should be taken based on the emission - * of this signal; instead, the application should make use of the other - * signals emitted on the object. - **/ - signals[SIG_STATE_CHANGED] = g_signal_new("state-changed", - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(XfceSMClientClass, - state_changed), - NULL, NULL, - _libxfce4ui_marshal_VOID__ENUM_ENUM, - G_TYPE_NONE, 2, - XFCE_TYPE_SM_CLIENT_STATE, - XFCE_TYPE_SM_CLIENT_STATE); - - g_object_class_install_property(gobject_class, PROP_SESSION_CONNECTION, - g_param_spec_pointer("session-connection", - "Session connection descriptor", - "The raw pointer to the SmcConnection", - G_PARAM_READABLE)); - g_object_class_install_property(gobject_class, PROP_STATE, - g_param_spec_enum("state", - "State", - "The client's current XSMP state", - XFCE_TYPE_SM_CLIENT_STATE, - XFCE_SM_CLIENT_STATE_DISCONNECTED, - G_PARAM_READABLE)); g_object_class_install_property(gobject_class, PROP_RESUMED, g_param_spec_boolean("resumed", "Resumed", @@ -435,18 +406,6 @@ xfce_sm_client_get_property(GObject *obj, XfceSMClient *sm_client = XFCE_SM_CLIENT(obj); switch(property_id) { - case PROP_SESSION_CONNECTION: -#ifdef HAVE_LIBSM - g_value_set_pointer(value, sm_client->session_connection); -#else - g_value_set_pointer(value, NULL); -#endif - break; - - case PROP_STATE: - g_value_set_enum(value, sm_client->state); - break; - case PROP_RESUMED: g_value_set_boolean(value, sm_client->resumed); break; @@ -572,8 +531,6 @@ xfce_sm_client_set_property(GObject *obj, } break; - case PROP_SESSION_CONNECTION: - case PROP_STATE: default: G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, property_id, pspec); } @@ -634,24 +591,24 @@ static inline const gchar * str_from_state(XfceSMClientState state) { switch(state) { + case XFCE_SM_CLIENT_STATE_DISCONNECTED: + return "DISCONNECTED"; + case XFCE_SM_CLIENT_STATE_REGISTERING: + return "REGISTERING"; case XFCE_SM_CLIENT_STATE_IDLE: return "IDLE"; case XFCE_SM_CLIENT_STATE_SAVING_PHASE_1: return "SAVING_PHASE_1"; - case XFCE_SM_CLIENT_STATE_WAITING_FOR_PHASE_2: - return "WAITING_FOR_PHASE_2"; - case XFCE_SM_CLIENT_STATE_SAVING_PHASE_2: - return "SAVING_PHASE_2"; case XFCE_SM_CLIENT_STATE_WAITING_FOR_INTERACT: return "WAITING_FOR_INTERACT"; case XFCE_SM_CLIENT_STATE_INTERACTING: return "INTERACTING"; + case XFCE_SM_CLIENT_STATE_WAITING_FOR_PHASE_2: + return "WAITING_FOR_PHASE_2"; + case XFCE_SM_CLIENT_STATE_SAVING_PHASE_2: + return "SAVING_PHASE_2"; case XFCE_SM_CLIENT_STATE_FROZEN: return "FROZEN"; - case XFCE_SM_CLIENT_STATE_DISCONNECTED: - return "DISCONNECTED"; - case XFCE_SM_CLIENT_STATE_REGISTERING: - return "REGISTERING"; default: return "(unknown)"; } @@ -749,8 +706,8 @@ xfce_sm_client_set_state(XfceSMClient *sm_client, sm_client->state = new_state; - g_signal_emit(G_OBJECT(sm_client), signals[SIG_STATE_CHANGED], 0, - old_state, new_state); + g_debug("XfceSMClient: state change: %s -> %s", + str_from_state(old_state), str_from_state(new_state)); } static inline char @@ -1010,9 +967,15 @@ xsmp_save_yourself(SmcConn smc_conn, return; } - if(sm_client->state != XFCE_SM_CLIENT_STATE_IDLE) { - g_warning("Got SaveYourself while in state %s, ignoring", - str_from_state(sm_client->state)); + /* the spec says we can receive a SaveYourself even if we + * haven't responded with SaveYourselfDone to a previous + * SaveYourself. in that case, we're supposed to immediately end + * the previous SaveYourself and start handling the new one. that's + * a bit of a pain, so we're just gonna try to fixup our state on + * this side and let things go. */ + if(sm_client->state != XFCE_SM_CLIENT_STATE_IDLE + && sm_client->state != XFCE_SM_CLIENT_STATE_FROZEN) + { SmcSaveYourselfDone(sm_client->session_connection, True); xfce_sm_client_set_state(sm_client, XFCE_SM_CLIENT_STATE_FROZEN); return; @@ -1576,14 +1539,14 @@ xfce_sm_client_connect(XfceSMClient *sm_client, callbacks.shutdown_cancelled.client_data = (SmPointer)sm_client; sm_client->session_connection = SmcOpenConnection(NULL, NULL, - SmProtoMajor, - SmProtoMinor, - mask, - &callbacks, - (char *)sm_client->client_id, - &given_client_id, - sizeof(buf)-1, - buf); + SmProtoMajor, + SmProtoMinor, + mask, + &callbacks, + (char *)sm_client->client_id, + &given_client_id, + sizeof(buf)-1, + buf); if(!sm_client->session_connection) { if(error) { @@ -2086,26 +2049,6 @@ xfce_sm_client_set_shutdown_command(XfceSMClient *sm_client, } /** - * xfce_sm_client_get_state: - * @sm_client: An #XfceSMClient - * - * Retrieves the session client's state. Note that this value - * is very specific to the X Session Management Protocol. - * - * If the state is %XFCE_SM_CLIENT_STATE_FROZEN, the application - * should attempt to disallow user interaction. - * - * Returns: a value from the #XfceSMClientState enum - **/ -XfceSMClientState -xfce_sm_client_get_state(XfceSMClient *sm_client) -{ - g_return_val_if_fail(XFCE_IS_SM_CLIENT(sm_client), - XFCE_SM_CLIENT_STATE_DISCONNECTED); - return sm_client->state; -} - -/** * xfce_sm_client_get_restart_style: * @sm_client: An #XfceSMClient * diff --git a/libxfce4ui/xfce-sm-client.h b/libxfce4ui/xfce-sm-client.h index 5651330..06b6a84 100644 --- a/libxfce4ui/xfce-sm-client.h +++ b/libxfce4ui/xfce-sm-client.h @@ -46,19 +46,6 @@ typedef enum typedef enum { - XFCE_SM_CLIENT_STATE_IDLE = 0, - XFCE_SM_CLIENT_STATE_SAVING_PHASE_1, - XFCE_SM_CLIENT_STATE_WAITING_FOR_PHASE_2, - XFCE_SM_CLIENT_STATE_SAVING_PHASE_2, - XFCE_SM_CLIENT_STATE_WAITING_FOR_INTERACT, - XFCE_SM_CLIENT_STATE_INTERACTING, - XFCE_SM_CLIENT_STATE_FROZEN, - XFCE_SM_CLIENT_STATE_DISCONNECTED, - XFCE_SM_CLIENT_STATE_REGISTERING, -} XfceSMClientState; - -typedef enum -{ XFCE_SM_CLIENT_PRIORITY_HIGH = 0, XFCE_SM_CLIENT_PRIORITY_WM = 15, XFCE_SM_CLIENT_PRIORITY_CORE = 25, @@ -103,12 +90,10 @@ gboolean xfce_sm_client_connect(XfceSMClient *sm_client, GError **error); void xfce_sm_client_disconnect(XfceSMClient *sm_client); -gboolean xfce_sm_client_is_resumed(XfceSMClient *sm_client); - void xfce_sm_client_request_shutdown(XfceSMClient *sm_client, XfceSMClientShutdownHint shutdown_hint); -XfceSMClientState xfce_sm_client_get_state(XfceSMClient *sm_client); +gboolean xfce_sm_client_is_resumed(XfceSMClient *sm_client); G_CONST_RETURN gchar *xfce_sm_client_get_client_id(XfceSMClient *sm_client); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits