Changes in uspace/app/shutdown-dlg/shutdown-dlg.c [97116a2:0d00e53] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/shutdown-dlg/shutdown-dlg.c
r97116a2 r0d00e53 1 1 /* 2 * Copyright (c) 202 5Jiri Svoboda2 * Copyright (c) 2024 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 41 41 #include <ui/fixed.h> 42 42 #include <ui/label.h> 43 #include <ui/msgdialog.h>44 43 #include <ui/resource.h> 45 44 #include <ui/ui.h> … … 49 48 static void wnd_close(ui_window_t *, void *); 50 49 static errno_t bg_wnd_paint(ui_window_t *, void *); 51 static void shutdown_progress_destroy(shutdown_progress_t *);52 static errno_t shutdown_confirm_msg_create(shutdown_dlg_t *);53 static errno_t shutdown_failed_msg_create(shutdown_dlg_t *);54 static errno_t shutdown_start(shutdown_dlg_t *);55 50 56 51 static ui_window_cb_t bg_window_cb = { … … 69 64 .shutdown_complete = sd_shutdown_complete, 70 65 .shutdown_failed = sd_shutdown_failed 71 };72 73 static void shutdown_confirm_msg_button(ui_msg_dialog_t *, void *, unsigned);74 static void shutdown_confirm_msg_close(ui_msg_dialog_t *, void *);75 76 static ui_msg_dialog_cb_t shutdown_confirm_msg_cb = {77 .button = shutdown_confirm_msg_button,78 .close = shutdown_confirm_msg_close79 };80 81 static void shutdown_failed_msg_button(ui_msg_dialog_t *, void *, unsigned);82 static void shutdown_failed_msg_close(ui_msg_dialog_t *, void *);83 84 static ui_msg_dialog_cb_t shutdown_failed_msg_cb = {85 .button = shutdown_failed_msg_button,86 .close = shutdown_failed_msg_close87 66 }; 88 67 … … 111 90 112 91 ui_lock(sddlg->ui); 113 shutdown_progress_destroy(sddlg->progress); 114 sddlg->progress = NULL; 115 ui_window_destroy(sddlg->bgwindow); 116 sddlg->bgwindow = NULL; 117 (void)shutdown_failed_msg_create(sddlg); 92 (void)ui_label_set_text(sddlg->progress->label, "Shutdown failed."); 93 (void)ui_window_paint(sddlg->progress->window); 118 94 ui_unlock(sddlg->ui); 119 95 } … … 159 135 160 136 return EOK; 161 }162 163 /** Create shutdown confirmation dialog.164 *165 * @param sddlg Shutdown dialog166 * @return EOK on success or an error code167 */168 static errno_t shutdown_confirm_msg_create(shutdown_dlg_t *sddlg)169 {170 ui_msg_dialog_params_t params;171 ui_msg_dialog_t *dialog;172 errno_t rc;173 174 ui_msg_dialog_params_init(¶ms);175 params.caption = "Shutdown";176 params.text = "Do you want to shut the system down?";177 params.choice = umdc_ok_cancel;178 params.flags |= umdf_topmost | umdf_center;179 180 rc = ui_msg_dialog_create(sddlg->ui, ¶ms, &dialog);181 if (rc != EOK)182 return rc;183 184 ui_msg_dialog_set_cb(dialog, &shutdown_confirm_msg_cb, sddlg);185 186 return EOK;187 }188 189 /** Create 'shutdown failed' message dialog.190 *191 * @param sddlg Shutdown dialog192 * @return EOK on success or an error code193 */194 static errno_t shutdown_failed_msg_create(shutdown_dlg_t *sddlg)195 {196 ui_msg_dialog_params_t params;197 ui_msg_dialog_t *dialog;198 errno_t rc;199 200 ui_msg_dialog_params_init(¶ms);201 params.caption = "Shutdown failed";202 params.text = "The system failed to shut down properly.";203 204 rc = ui_msg_dialog_create(sddlg->ui, ¶ms, &dialog);205 if (rc != EOK)206 return rc;207 208 ui_msg_dialog_set_cb(dialog, &shutdown_failed_msg_cb, sddlg);209 210 return EOK;211 }212 213 /** Shutdown confirm message dialog button press.214 *215 * @param dialog Message dialog216 * @param arg Argument (ui_demo_t *)217 * @param bnum Button number218 */219 static void shutdown_confirm_msg_button(ui_msg_dialog_t *dialog,220 void *arg, unsigned bnum)221 {222 shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;223 224 ui_msg_dialog_destroy(dialog);225 226 if (bnum == 0)227 shutdown_start(sddlg);228 else229 ui_quit(sddlg->ui);230 }231 232 /** Shutdown confirm message dialog close request.233 *234 * @param dialog Message dialog235 * @param arg Argument (ui_demo_t *)236 */237 static void shutdown_confirm_msg_close(ui_msg_dialog_t *dialog, void *arg)238 {239 shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;240 241 ui_msg_dialog_destroy(dialog);242 ui_quit(sddlg->ui);243 }244 245 /** Shutdown faield message dialog button press.246 *247 * @param dialog Message dialog248 * @param arg Argument (ui_demo_t *)249 * @param bnum Button number250 */251 static void shutdown_failed_msg_button(ui_msg_dialog_t *dialog,252 void *arg, unsigned bnum)253 {254 shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;255 256 ui_msg_dialog_destroy(dialog);257 ui_quit(sddlg->ui);258 }259 260 /** Shutdown failed message dialog close request.261 *262 * @param dialog Message dialog263 * @param arg Argument (ui_demo_t *)264 */265 static void shutdown_failed_msg_close(ui_msg_dialog_t *dialog, void *arg)266 {267 shutdown_dlg_t *sddlg = (shutdown_dlg_t *) arg;268 269 ui_msg_dialog_destroy(dialog);270 ui_quit(sddlg->ui);271 137 } 272 138 … … 296 162 params.rect.p0.x = 0; 297 163 params.rect.p0.y = 0; 298 params.rect.p1.x = 64;164 params.rect.p1.x = 24; 299 165 params.rect.p1.y = 5; 300 166 } else { … … 379 245 static void shutdown_progress_destroy(shutdown_progress_t *progress) 380 246 { 381 if (progress == NULL)382 return;383 384 247 ui_window_destroy(progress->window); 385 248 free(progress); 386 249 } 387 250 388 static errno_t shutdown_start(shutdown_dlg_t *sddlg)389 {390 errno_t rc;391 392 rc = shutdown_progress_create(sddlg, &sddlg->progress);393 if (rc != EOK)394 return rc;395 396 rc = system_open(SYSTEM_DEFAULT, &sd_system_cb, sddlg, &sddlg->system);397 if (rc != EOK) {398 printf("Failed opening system control service.\n");399 goto error;400 }401 402 rc = system_shutdown(sddlg->system);403 if (rc != EOK) {404 printf("Failed requesting system shutdown.\n");405 goto error;406 }407 408 return EOK;409 error:410 return rc;411 }412 413 251 /** Run shutdown dialog on display. */ 414 252 static errno_t shutdown_dlg(const char *display_spec) 415 253 { 416 254 ui_t *ui = NULL; 255 ui_wnd_params_t params; 256 ui_window_t *window = NULL; 417 257 shutdown_dlg_t sddlg; 418 ui_wnd_params_t params;419 258 errno_t rc; 420 259 … … 426 265 goto error; 427 266 } 428 429 sddlg.ui = ui;430 267 431 268 ui_wnd_params_init(¶ms); … … 434 271 params.placement = ui_wnd_place_full_screen; 435 272 params.flags |= ui_wndf_topmost | ui_wndf_nofocus; 436 /* 437 * params.rect.p0.x = 0; 438 * params.rect.p0.y = 0; 439 * params.rect.p1.x = 1; 440 * params.rect.p1.y = 1; 441 */ 442 443 rc = ui_window_create(sddlg.ui, ¶ms, &sddlg.bgwindow); 273 if (ui_is_textmode(ui)) { 274 params.rect.p0.x = 0; 275 params.rect.p0.y = 0; 276 params.rect.p1.x = 24; 277 params.rect.p1.y = 5; 278 } else { 279 params.rect.p0.x = 0; 280 params.rect.p0.y = 0; 281 params.rect.p1.x = 300; 282 params.rect.p1.y = 60; 283 } 284 285 sddlg.ui = ui; 286 287 rc = ui_window_create(ui, ¶ms, &window); 444 288 if (rc != EOK) { 445 289 printf("Error creating window.\n"); … … 447 291 } 448 292 449 ui_window_set_cb(sddlg.bgwindow, &bg_window_cb, (void *)&sddlg); 450 451 if (ui_is_textmode(sddlg.ui)) { 452 rc = gfx_color_new_ega(0x17, &sddlg.bg_color); 453 if (rc != EOK) { 454 printf("Error allocating color.\n"); 455 goto error; 456 } 457 } else { 458 rc = gfx_color_new_rgb_i16(0x8000, 0xc800, 0xffff, &sddlg.bg_color); 459 if (rc != EOK) { 460 printf("Error allocating color.\n"); 461 goto error; 462 } 463 } 464 465 rc = ui_window_paint(sddlg.bgwindow); 293 ui_window_set_cb(window, &bg_window_cb, (void *) &sddlg); 294 sddlg.bgwindow = window; 295 296 rc = gfx_color_new_rgb_i16(0x8000, 0xc800, 0xffff, &sddlg.bg_color); 297 if (rc != EOK) { 298 printf("Error allocating color.\n"); 299 goto error; 300 } 301 302 rc = ui_window_paint(window); 466 303 if (rc != EOK) { 467 304 printf("Error painting window.\n"); … … 469 306 } 470 307 471 (void)shutdown_confirm_msg_create(&sddlg); 308 rc = shutdown_progress_create(&sddlg, &sddlg.progress); 309 if (rc != EOK) 310 return rc; 311 312 rc = system_open(SYSTEM_DEFAULT, &sd_system_cb, &sddlg, &sddlg.system); 313 if (rc != EOK) { 314 printf("Failed opening system control service.\n"); 315 goto error; 316 } 317 318 rc = system_shutdown(sddlg.system); 319 if (rc != EOK) { 320 printf("Failed requesting system shutdown.\n"); 321 goto error; 322 } 472 323 473 324 ui_run(ui); 474 325 475 326 shutdown_progress_destroy(sddlg.progress); 476 if (sddlg.bgwindow != NULL) 477 ui_window_destroy(sddlg.bgwindow); 478 if (sddlg.system != NULL) 479 system_close(sddlg.system); 327 ui_window_destroy(window); 328 system_close(sddlg.system); 480 329 gfx_color_delete(sddlg.bg_color); 481 330 ui_destroy(ui); … … 487 336 if (sddlg.bg_color != NULL) 488 337 gfx_color_delete(sddlg.bg_color); 489 if ( sddlg.bgwindow != NULL)490 ui_window_destroy( sddlg.bgwindow);338 if (window != NULL) 339 ui_window_destroy(window); 491 340 if (ui != NULL) 492 341 ui_destroy(ui);
Note:
See TracChangeset
for help on using the changeset viewer.