Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
xfce4-power-manager
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Xfce
xfce4-power-manager
Commits
abb27c06
Commit
abb27c06
authored
15 years ago
by
Ali Abdallah
Browse files
Options
Downloads
Patches
Plain Diff
Rework the way to switch off the screen on lid event and fix bug #5805
parent
212ef6d8
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/xfpm-dpms.c
+43
-115
43 additions, 115 deletions
src/xfpm-dpms.c
src/xfpm-dpms.h
+8
-0
8 additions, 0 deletions
src/xfpm-dpms.h
src/xfpm-engine.c
+15
-5
15 additions, 5 deletions
src/xfpm-engine.c
with
66 additions
and
120 deletions
src/xfpm-dpms.c
+
43
−
115
View file @
abb27c06
...
@@ -28,11 +28,6 @@
...
@@ -28,11 +28,6 @@
#include
<string.h>
#include
<string.h>
#include
<gdk/gdk.h>
#include
<gdk/gdk.h>
#include
<gdk/gdkx.h>
#include
<X11/Xproto.h>
#include
<X11/extensions/dpms.h>
#include
<X11/extensions/dpmsstr.h>
#include
<libxfce4util/libxfce4util.h>
#include
<libxfce4util/libxfce4util.h>
...
@@ -43,7 +38,6 @@
...
@@ -43,7 +38,6 @@
#include
"xfpm-adapter.h"
#include
"xfpm-adapter.h"
#include
"xfpm-xfconf.h"
#include
"xfpm-xfconf.h"
#include
"xfpm-screen-saver.h"
#include
"xfpm-screen-saver.h"
#include
"xfpm-button-hal.h"
#include
"xfpm-config.h"
#include
"xfpm-config.h"
#ifdef HAVE_DPMS
#ifdef HAVE_DPMS
...
@@ -58,7 +52,6 @@ struct XfpmDpmsPrivate
...
@@ -58,7 +52,6 @@ struct XfpmDpmsPrivate
XfpmXfconf
*
conf
;
XfpmXfconf
*
conf
;
XfpmAdapter
*
adapter
;
XfpmAdapter
*
adapter
;
XfpmScreenSaver
*
saver
;
XfpmScreenSaver
*
saver
;
XfpmButtonHal
*
bt_hal
;
gboolean
dpms_capable
;
gboolean
dpms_capable
;
gboolean
inhibited
;
gboolean
inhibited
;
...
@@ -225,103 +218,6 @@ xfpm_dpms_inhibit_changed_cb (XfpmScreenSaver *saver, gboolean inhibited, XfpmDp
...
@@ -225,103 +218,6 @@ xfpm_dpms_inhibit_changed_cb (XfpmScreenSaver *saver, gboolean inhibited, XfpmDp
xfpm_dpms_refresh
(
dpms
);
xfpm_dpms_refresh
(
dpms
);
}
}
static
gboolean
xfpm_dpms_force_off
(
gpointer
data
)
{
XfpmDpms
*
dpms
;
CARD16
power_level
;
BOOL
state
;
dpms
=
XFPM_DPMS
(
data
);
TRACE
(
"Start"
);
if
(
G_UNLIKELY
(
!
DPMSInfo
(
GDK_DISPLAY
(),
&
power_level
,
&
state
))
)
{
g_warning
(
"Cannot get DPMSInfo"
);
goto
out
;
}
if
(
power_level
!=
DPMSModeOff
)
{
if
(
xfpm_is_multihead_connected
()
)
goto
out
;
TRACE
(
"Checking if we have multiple monitor : no"
);
TRACE
(
"Forcing DPMSModeOff"
);
if
(
!
DPMSForceLevel
(
GDK_DISPLAY
(),
DPMSModeOff
)
)
{
g_warning
(
"Cannot set Force DPMSModeOff"
);
goto
out
;
}
XSync
(
GDK_DISPLAY
(),
FALSE
);
}
out:
dpms
->
priv
->
switch_off_timeout_id
=
0
;
return
FALSE
;
}
static
gboolean
xfpm_dpms_force_on
(
gpointer
data
)
{
XfpmDpms
*
dpms
;
CARD16
power_level
;
BOOL
state
;
dpms
=
XFPM_DPMS
(
data
);
TRACE
(
"start"
);
if
(
G_UNLIKELY
(
!
DPMSInfo
(
GDK_DISPLAY
(),
&
power_level
,
&
state
))
)
{
g_warning
(
"Cannot get DPMSInfo"
);
goto
out
;
}
if
(
power_level
!=
DPMSModeOn
)
{
TRACE
(
"Forcing DPMSModeOn"
);
if
(
!
DPMSForceLevel
(
GDK_DISPLAY
(),
DPMSModeOn
)
)
{
g_warning
(
"Cannot set Force DPMSModeOn"
);
goto
out
;
}
XSync
(
GDK_DISPLAY
(),
FALSE
);
}
out:
dpms
->
priv
->
switch_on_timeout_id
=
0
;
return
FALSE
;
}
static
void
xfpm_dpms_lid_event_cb
(
XfpmButtonHal
*
bt
,
gboolean
pressed
,
XfpmDpms
*
dpms
)
{
TRACE
(
"pressed: %s"
,
xfpm_bool_to_string
(
pressed
));
if
(
dpms
->
priv
->
switch_off_timeout_id
!=
0
)
{
g_source_remove
(
dpms
->
priv
->
switch_off_timeout_id
);
dpms
->
priv
->
switch_off_timeout_id
=
0
;
}
if
(
dpms
->
priv
->
switch_on_timeout_id
!=
0
)
{
g_source_remove
(
dpms
->
priv
->
switch_on_timeout_id
);
dpms
->
priv
->
switch_on_timeout_id
=
0
;
}
if
(
pressed
)
{
g_timeout_add
(
100
,
(
GSourceFunc
)
xfpm_dpms_force_off
,
dpms
);
}
else
{
g_timeout_add
(
100
,
(
GSourceFunc
)
xfpm_dpms_force_on
,
dpms
);
}
}
static
void
static
void
xfpm_dpms_class_init
(
XfpmDpmsClass
*
klass
)
xfpm_dpms_class_init
(
XfpmDpmsClass
*
klass
)
{
{
...
@@ -349,7 +245,6 @@ xfpm_dpms_init(XfpmDpms *dpms)
...
@@ -349,7 +245,6 @@ xfpm_dpms_init(XfpmDpms *dpms)
dpms
->
priv
->
adapter
=
xfpm_adapter_new
();
dpms
->
priv
->
adapter
=
xfpm_adapter_new
();
dpms
->
priv
->
saver
=
xfpm_screen_saver_new
();
dpms
->
priv
->
saver
=
xfpm_screen_saver_new
();
dpms
->
priv
->
conf
=
xfpm_xfconf_new
();
dpms
->
priv
->
conf
=
xfpm_xfconf_new
();
dpms
->
priv
->
bt_hal
=
xfpm_button_hal_get
();
g_signal_connect
(
dpms
->
priv
->
saver
,
"screen-saver-inhibited"
,
g_signal_connect
(
dpms
->
priv
->
saver
,
"screen-saver-inhibited"
,
G_CALLBACK
(
xfpm_dpms_inhibit_changed_cb
),
dpms
);
G_CALLBACK
(
xfpm_dpms_inhibit_changed_cb
),
dpms
);
...
@@ -360,9 +255,6 @@ xfpm_dpms_init(XfpmDpms *dpms)
...
@@ -360,9 +255,6 @@ xfpm_dpms_init(XfpmDpms *dpms)
g_signal_connect
(
dpms
->
priv
->
conf
,
"notify"
,
g_signal_connect
(
dpms
->
priv
->
conf
,
"notify"
,
G_CALLBACK
(
xfpm_dpms_settings_changed_cb
),
dpms
);
G_CALLBACK
(
xfpm_dpms_settings_changed_cb
),
dpms
);
g_signal_connect
(
dpms
->
priv
->
bt_hal
,
"lid-event"
,
G_CALLBACK
(
xfpm_dpms_lid_event_cb
),
dpms
);
dpms
->
priv
->
on_battery
=
!
xfpm_adapter_get_present
(
dpms
->
priv
->
adapter
);
dpms
->
priv
->
on_battery
=
!
xfpm_adapter_get_present
(
dpms
->
priv
->
adapter
);
xfpm_dpms_refresh
(
dpms
);
xfpm_dpms_refresh
(
dpms
);
}
}
...
@@ -380,11 +272,8 @@ xfpm_dpms_finalize(GObject *object)
...
@@ -380,11 +272,8 @@ xfpm_dpms_finalize(GObject *object)
dpms
=
XFPM_DPMS
(
object
);
dpms
=
XFPM_DPMS
(
object
);
g_object_unref
(
dpms
->
priv
->
conf
);
g_object_unref
(
dpms
->
priv
->
conf
);
g_object_unref
(
dpms
->
priv
->
adapter
);
g_object_unref
(
dpms
->
priv
->
adapter
);
g_object_unref
(
dpms
->
priv
->
saver
);
g_object_unref
(
dpms
->
priv
->
saver
);
g_object_unref
(
dpms
->
priv
->
bt_hal
);
G_OBJECT_CLASS
(
xfpm_dpms_parent_class
)
->
finalize
(
object
);
G_OBJECT_CLASS
(
xfpm_dpms_parent_class
)
->
finalize
(
object
);
}
}
...
@@ -397,14 +286,53 @@ xfpm_dpms_new (void)
...
@@ -397,14 +286,53 @@ xfpm_dpms_new (void)
return
dpms
;
return
dpms
;
}
}
/*
* Get if the display is DPMS capable. if not the dpms
* object is freed by xfpm-engine
*/
gboolean
xfpm_dpms_capable
(
XfpmDpms
*
dpms
)
gboolean
xfpm_dpms_capable
(
XfpmDpms
*
dpms
)
{
{
g_return_val_if_fail
(
XFPM_IS_DPMS
(
dpms
),
FALSE
);
g_return_val_if_fail
(
XFPM_IS_DPMS
(
dpms
),
FALSE
);
return
dpms
->
priv
->
dpms_capable
;
return
dpms
->
priv
->
dpms_capable
;
}
}
void
xfpm_dpms_force_level
(
XfpmDpms
*
dpms
,
CARD16
level
)
{
CARD16
current_level
;
BOOL
current_state
;
TRACE
(
"start"
);
if
(
!
dpms
->
priv
->
dpms_capable
)
goto
out
;
if
(
G_UNLIKELY
(
!
DPMSInfo
(
GDK_DISPLAY
(),
&
current_level
,
&
current_state
))
)
{
g_warning
(
"Cannot get DPMSInfo"
);
goto
out
;
}
if
(
!
current_state
)
{
TRACE
(
"DPMS is disabled"
);
goto
out
;
}
if
(
current_level
!=
level
)
{
TRACE
(
"Forcing DPMS mode %d"
,
level
);
if
(
!
DPMSForceLevel
(
GDK_DISPLAY
(),
level
)
)
{
g_warning
(
"Cannot set Force DPMS level %d"
,
level
);
goto
out
;
}
XSync
(
GDK_DISPLAY
(),
FALSE
);
}
else
{
TRACE
(
"No need to change DPMS mode, current_level=%d requested_level=%d"
,
current_level
,
level
);
}
out:
;
}
#endif
/* HAVE_DPMS */
#endif
/* HAVE_DPMS */
This diff is collapsed.
Click to expand it.
src/xfpm-dpms.h
+
8
−
0
View file @
abb27c06
...
@@ -31,6 +31,11 @@
...
@@ -31,6 +31,11 @@
#ifdef HAVE_DPMS
#ifdef HAVE_DPMS
#include
<gdk/gdkx.h>
#include
<X11/Xproto.h>
#include
<X11/extensions/dpms.h>
#include
<X11/extensions/dpmsstr.h>
G_BEGIN_DECLS
G_BEGIN_DECLS
#define XFPM_TYPE_DPMS (xfpm_dpms_get_type () )
#define XFPM_TYPE_DPMS (xfpm_dpms_get_type () )
...
@@ -53,10 +58,13 @@ typedef struct
...
@@ -53,10 +58,13 @@ typedef struct
}
XfpmDpmsClass
;
}
XfpmDpmsClass
;
GType
xfpm_dpms_get_type
(
void
)
G_GNUC_CONST
;
GType
xfpm_dpms_get_type
(
void
)
G_GNUC_CONST
;
XfpmDpms
*
xfpm_dpms_new
(
void
);
XfpmDpms
*
xfpm_dpms_new
(
void
);
gboolean
xfpm_dpms_capable
(
XfpmDpms
*
dpms
)
G_GNUC_PURE
;
gboolean
xfpm_dpms_capable
(
XfpmDpms
*
dpms
)
G_GNUC_PURE
;
void
xfpm_dpms_force_level
(
XfpmDpms
*
dpms
,
CARD16
level
);
G_END_DECLS
G_END_DECLS
#endif
/* HAVE_DPMS */
#endif
/* HAVE_DPMS */
...
...
This diff is collapsed.
Click to expand it.
src/xfpm-engine.c
+
15
−
5
View file @
abb27c06
...
@@ -236,15 +236,20 @@ xfpm_engine_lid_event (XfpmButtonHal *bt_hal, gboolean pressed, XfpmEngine *engi
...
@@ -236,15 +236,20 @@ xfpm_engine_lid_event (XfpmButtonHal *bt_hal, gboolean pressed, XfpmEngine *engi
{
{
XfpmLidTriggerAction
action
;
XfpmLidTriggerAction
action
;
if
(
pressed
)
g_object_get
(
G_OBJECT
(
engine
->
priv
->
conf
),
{
g_object_get
(
G_OBJECT
(
engine
->
priv
->
conf
),
engine
->
priv
->
on_battery
?
LID_SWITCH_ON_BATTERY_CFG
:
LID_SWITCH_ON_AC_CFG
,
&
action
,
engine
->
priv
->
on_battery
?
LID_SWITCH_ON_BATTERY_CFG
:
LID_SWITCH_ON_AC_CFG
,
&
action
,
NULL
);
NULL
);
if
(
pressed
)
{
XFPM_DEBUG_ENUM
(
"LID close event"
,
action
,
XFPM_TYPE_LID_TRIGGER_ACTION
);
XFPM_DEBUG_ENUM
(
"LID close event"
,
action
,
XFPM_TYPE_LID_TRIGGER_ACTION
);
if
(
action
==
LID_TRIGGER_LOCK_SCREEN
)
if
(
action
==
LID_TRIGGER_NOTHING
)
{
if
(
!
xfpm_is_multihead_connected
()
)
xfpm_dpms_force_level
(
engine
->
priv
->
dpms
,
DPMSModeOff
);
}
else
if
(
action
==
LID_TRIGGER_LOCK_SCREEN
)
{
{
if
(
!
xfpm_is_multihead_connected
()
)
if
(
!
xfpm_is_multihead_connected
()
)
xfpm_lock_screen
();
xfpm_lock_screen
();
...
@@ -252,6 +257,11 @@ xfpm_engine_lid_event (XfpmButtonHal *bt_hal, gboolean pressed, XfpmEngine *engi
...
@@ -252,6 +257,11 @@ xfpm_engine_lid_event (XfpmButtonHal *bt_hal, gboolean pressed, XfpmEngine *engi
else
else
xfpm_engine_shutdown_request
(
engine
,
action
,
FALSE
);
xfpm_engine_shutdown_request
(
engine
,
action
,
FALSE
);
}
}
else
{
XFPM_DEBUG_ENUM
(
"LID opened"
,
action
,
XFPM_TYPE_LID_TRIGGER_ACTION
);
xfpm_dpms_force_level
(
engine
->
priv
->
dpms
,
DPMSModeOn
);
}
}
}
static
void
static
void
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment