Exemplo n.º 1
0
static int
timezone_set (const char *new_tz)
{
        GError *error;

        error = NULL;
        if (!system_timezone_set (new_tz, &error)) {
                g_printerr ("%s\n", error->message);
                g_error_free (error);
                return 1;
        }

	return 0;
}
gboolean
gsd_datetime_mechanism_set_timezone (GsdDatetimeMechanism  *mechanism,
                                     const char            *tz,
                                     DBusGMethodInvocation *context)
{
        GError *error;

        reset_killtimer ();
        g_debug ("SetTimezone('%s') called", tz);

        if (!_check_polkit_for_action (mechanism, context))
                return FALSE;

        error = NULL;

        if (!gsd_datetime_check_tz_name (tz, &error))
                return FALSE;

        if (!system_timezone_set (tz, &error)) {
                GError *error2;
                int     code;

                if (error->code == SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE)
                        code = GSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE;
                else
                        code = GSD_DATETIME_MECHANISM_ERROR_GENERAL;

                error2 = g_error_new (GSD_DATETIME_MECHANISM_ERROR,
                                      code, "%s", error->message);

                g_error_free (error);

                dbus_g_method_return_error (context, error2);
                g_error_free (error2);

                return FALSE;
        }

        dbus_g_method_return (context);
        return TRUE;
}